例如,假设我有一个文本文件example.txt,其中包含: 我喜欢狗。 我最喜欢的狗是乔治,因为他是我的狗。 乔治是个好狗。
现在我如何提取“乔治”,因为它是“我最喜欢的狗是”之后的第一个单词?
如果有多个空格,例如 我最喜欢的狗是乔治.....
有没有办法可靠地提取“乔治”这个词,无论“我最喜欢的狗是”和“乔治”之间的空格数量是多少?
答案 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字符串操作只有在处理脚本中的一些简单字符串时才有用。就像操纵变量一样。