您可以使用哪些正则表达式来匹配两个连续的行?
目的是不使用awk
或sed
之类的任何软件包,而仅在外壳程序脚本中使用纯RegExp。
例如,我想确保在下一行中紧跟着“ hello”一词。
接受标准:
#/bin/bash
file=./myfile.txt
regex='^hello'
[[ `cat $file` =~ $regexp ]] && echo "yes" || echo "no"
myfile.txt
abc is def
hello
world
cde is efg
答案 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"
但是grep
或awk
是完成这项工作的更好的工具。