[英]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.