如何提取字符串后面的第一个单词?

时间:2010-08-23 17:04:05

标签: string parsing bash

例如,假设我有一个文本文件example.txt,其中包含: 我喜欢狗。 我最喜欢的狗是乔治,因为他是我的狗。 乔治是个好狗。

现在我如何提取“乔治”,因为它是“我最喜欢的狗是”之后的第一个单词?

如果有多个空格,例如 我最喜欢的狗是乔治.....

有没有办法可靠地提取“乔治”这个词,无论“我最喜欢的狗是”和“乔治”之间的空格数量是多少?

4 个答案:

答案 0 :(得分:1)

如果您没有安装perl,可以使用sed:

cat example.txt | sed 's/my favourite dog is *\([a-zA-Z]*\) .*/\1/g'

答案 1 :(得分:1)

Pure Bash:

string='blah blah ! HEAT OF FORMATION 105.14088 93.45997 46.89387 blah blah'
pattern='HEAT OF FORMATION ([^[:blank:]]*)'
[[ $string =~ $pattern ]]
match=${BASH_REMATCH[1]}

答案 2 :(得分:0)

你可以这样做:

cat example.txt | perl -pe 's/My favorite dog is\s+(\w+).*/\1/g'

输出Geroge

答案 3 :(得分:0)

如果您正在尝试搜索文件,特别是如果您有一个大文件,则使用sed / awk / perl等外部工具比使用纯bash循环和bash字符串操作更快。

sed 's/.*HEAT OF FOMATION[ \t]*\(.[^ \t]*\).*/\1/'  file

纯粹的bash字符串操作只有在处理脚本中的一些简单字符串时才有用。就像操纵变量一样。