如何使用cut
在分隔符之前获取一个单词?例如,我在file.txt
中有以下一行:
一二三四五:六七
当我使用下面的cut
命令时:
cat file.txt | cut -d ':' -f1
...然后我在分隔符之前得到了一切;即:
一二三四五。
...但我只想得到"五"
我不想使用awk
或位置,因为文件一直在变化,并且"五"可以在任何地方。唯一固定的是,五个将有一个":"分隔符。
谢谢!
答案 0 :(得分:2)
由于您需要在这里使用更多的一个字段分隔符,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
答案 1 :(得分:1)
Pure bash:
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)
应设置初始变量)
答案 2 :(得分:0)
cat file.txt | while read line
do
for word in $line
do
if [ echo $word | grep ':$'
] then;
echo $word
fi
done
done
如果它是一致的结构(行中的单词数不同),您可以将第一行更改为:
echo $word | grep ':$'
以避免在分隔符右侧处理':'的方式
答案 3 :(得分:-1)
尝试
PropertyGrid
无论发生什么事情,这将始终在第一个echo "one two three four five: six seven" | awk -F ':' '{print $1}' | awk '{print $NF}'
之前打印最后一个单词