regex用于检测连续行中的两个单词
我有一堆文本文件,需要在bash中使用正则表达式删除一些模式。只有正则表达式。例如: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 到目前为止,我
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”是什么意思。您通过什么程序应用该正则表达式?