regex用于检测连续行中的两个单词

regex用于检测连续行中的两个单词,regex,bash,Regex,Bash,我有一堆文本文件,需要在bash中使用正则表达式删除一些模式。只有正则表达式。例如: brown blue sad happy orange green sad happy brown blue orange green 要检测“brown blue”后跟换行符和“sad happy”的时间,然后仅在这种情况下删除输出中的“brown blue”。这是预期的结果: sad happy orange green sad happy brown blue orange green 到目前为止,我

我有一堆文本文件,需要在bash中使用正则表达式删除一些模式。只有正则表达式。例如:

brown blue
sad happy
orange green
sad happy
brown blue
orange green
要检测“brown blue”后跟换行符和“sad happy”的时间,然后仅在这种情况下删除输出中的“brown blue”。这是预期的结果:

sad happy
orange green
sad happy
brown blue
orange green
到目前为止,我一直在尝试的是不检测换行符。删除所需换行符的第一步是什么。大概是这样的:

(?<=blue).*(?=happy)

'blue\nhappy'

(?如果我正确理解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

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

您使用的是
grep
?使用
grep-Poz'(?尝试
brown-blue(?=\ssad happy)
只需要正则表达式regex既不是程序也不是编程语言,因此您需要一个能够执行正则表达式匹配和删除一些文本的工具。此外……我不知道“bash中的just regex”是什么意思。您通过什么程序应用该正则表达式?