正则表达式检测连续两行中的两个单词

时间:2018-10-04 13:57:13

标签: regex bash

我有一堆文本文件,需要使用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'

1 个答案:

答案 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

尽管我仍然不确定“正则表达式”是什么意思。