繁体   English   中英

在分隔符前切一个单词 - Bash

[英]Cut one word before delimiter - Bash

如何使用cut在分隔符之前获取一个单词? 例如,我在file.txt有以下行:

一二三四五六七

当我使用下面的cut命令时:

cat file.txt | cut -d ':' -f1

...然后我得到了分隔符之前的所有内容; IE:

一二三四五

...但我只想得到“五”

我不想使用awk或位置,因为文件一直在变化,“五”的位置可以在任何地方。 唯一固定的是五个将有一个“:”分隔符。

谢谢!

由于您需要在此处使用多个字段分隔符,因此awk来救援:

s='one two three four five: six seven'
awk -F '[: ]' '{print $5}' <<< "$s"
five

编辑:如果您的现场位置可以改变,那么试试这个awk

awk -F: '{sub(/.*[[:blank:]]/, "", $1); print $1}' <<< "$s"
five

这是一个 BASH 单行代码,可以在单个命令中获得它:

[[ $s =~ ([^: ]+): ]] && echo "${BASH_REMATCH[1]}"
five

纯猛击:

s='one two three four five: six seven'
w=${s%%:*}                 # cut off everything from the first colon
l=${w##* }                 # cut off everything until last space
echo $l
# => five

(如果您的文件中有一个冒号,则s=$(grep : file)应该设置您的初始变量)

你可能想做这样的事情:

cat file.txt | while read line
do
  for word in $line
    do
      if [ `echo $word | grep ':$'` ] then;
        echo $word
      fi
    done
done

如果是一致的结构(一行中的单词数不同),则可以将第一行更改为:

cat file.txt | cut -d':' -f1 | while read line
do ...

这样可以避免处理分隔符右侧的“:”

尝试

echo "one two three four five: six seven" | awk -F ':' '{print $1}' | awk '{print $NF}'

这将始终在第一个之前打印最后一个单词:无论发生什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM