Regex sed或perl仅当第一个内部单词匹配时才删除外括号
使用GNURegex sed或perl仅当第一个内部单词匹配时才删除外括号,regex,perl,bash,sed,Regex,Perl,Bash,Sed,使用GNUsed,我需要删除像(单击此处)这样的附加短语,包括paren。单击此处后的文本有所不同,但我需要删除整个外圆括号 我在以下方面尝试了许多变化,但似乎没有找到正确的变化: sed -e 's/\((click here.*[^)]*\)//' 编辑< /强>愚蠢地,我没有注意到在括号中的中间经常有一个断线,所以 SED可能不起作用。例如: (click here to enter some text) 如果没有嵌套参数,您可以尝试以下方法: sed -e 's/(click he
sed
,我需要删除像(单击此处)
这样的附加短语,包括paren。单击此处后的文本有所不同,但我需要删除整个外圆括号
我在以下方面尝试了许多变化,但似乎没有找到正确的变化:
sed -e 's/\((click here.*[^)]*\)//'
<强>编辑< /强>愚蠢地,我没有注意到在括号中的中间经常有一个断线,所以<代码> SED可能不起作用。例如:
(click here to
enter some text)
如果没有嵌套参数,您可以尝试以下方法:
sed -e 's/(click here [^)]*)//'
使用perl,您可以运行:
perl -00 -pe "s/\(click here [^)]*\)//g" inputfile > outputfile
它将以字符串形式读取输入文件,然后替换所有出现的
(单击此处anychar,但“(”)
,然后在输出文件中输出所有内容。这里还有另一种sed
方法,它将完整的输入保留在保留缓冲区中:
# see http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/
echo '
()
(do not delete this)
()
(click here to
enter some text)
()
' |
sed -n '1h;1!H;${;g;s/(\([^)]*\))/\1/g;p;}'
其结果是删除
单击此处
和紧跟其后的任何单个单词,留下剩余的单词和参数。例如(单击此处输入文本)
变成(输入文本)
@Michael,可能不会。至少它在这里起作用。无论如何,我刚刚发现你不需要逃避父母。我相应地编辑了答案。@Michael:你能提供一个它不起作用的测试用例吗?考虑:echo“这是一个(单击此处输入文本)系统的测试”| sed-e/(单击此处[^)]*)//“
注意,在最后一次/if多次单击可能会出现在一行之后,您可能需要一个g。@Seth Robertson我刚刚找到了不起作用的地方,并用手掌捂住了脸。在我正在测试这个操作的文件中,断点有时出现在括号中的中间。@米迦勒:它将记录分隔符定义为NULL,因此整个文件以单个字符串读取。