仅使用Regex和Bash功能匹配两个连续的行

时间:2019-01-21 11:09:09

标签: regex bash

您可以使用哪些正则表达式来匹配两个连续的行? 目的是不使用awksed之类的任何软件包,而仅在外壳程序脚本中使用纯RegExp。

例如,我想确保在下一行中紧跟着“ hello”一词。

接受标准:

  • “你好”之前不能有空格
  • “世界”之前必须至少有1个或更多空间。
#/bin/bash

file=./myfile.txt

regex='^hello'

[[ `cat $file` =~ $regexp ]] && echo "yes" || echo "no"

myfile.txt

abc is def
hello
 world
cde is efg

1 个答案:

答案 0 :(得分:2)

这是纯bash方式:

file='./myfile.txt'
[[ $(<$file) =~ hello$'\n'[[:blank:]]*world ]] && echo "yes" || echo "no"

yes

此处$'\n'匹配新行,[[:blank:]]*匹配0+制表符或空格。

如果您想更加精确,请使用:

[[ $(<file) =~ (^|$'\n')hello$'\n'[[:blank:]]*world($'\n'|$) ]] && echo "yes" || echo "no"

但是grepawk是完成这项工作的更好的工具。