我有一堆文本文件,需要使用bash中的正则表达式删除一些模式。正则表达式。一个例子:
brown blue
sad happy
orange green
sad happy
brown blue
orange green
要检测换行符和“ sad happy”之后是“棕蓝色”,然后仅在这种情况下,在输出中删除“棕蓝色”。这是预期的结果:
sad happy
orange green
sad happy
brown blue
orange green
到目前为止,我一直没有检测到换行符,这是删除所需行的第一步。像这样:
(?<=blue).*(?=happy)
'blue\nhappy'
答案 0 :(得分:1)
如果我正确理解了OP的要求,怎么办:
#!/bin/bash
nl=$'\n'
str="brown blue
sad happy
orange green
sad happy
brown blue
orange green"
if [[ "$str" =~ ^(.*)brown\ blue${nl}(sad\ happy.*)$ ]]; then
echo "${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
fi
产生:
sad happy
orange green
sad happy
brown blue
orange green
尽管我仍然不确定“正则表达式”是什么意思。