sed或perl仅当第一个内部单词匹配时才删除外部括号

时间:2011-05-27 16:40:59

标签: regex perl bash sed

使用GNU sed,我需要删除包括parens在内的(click here ....)等括号内的短语。 click here后面的文字各不相同,但我需要删除整个外括号。

我在下面尝试了很多变化,但我似乎无法找到正确的变体:

sed -e 's/\((click here.*[^)]*\)//'

编辑愚蠢的我没有注意到在括号字符串的中间经常会出现换行符,所以sed可能无法正常工作。例如:

(click here to
enter some text)

3 个答案:

答案 0 :(得分:3)

如果没有嵌套的parens,也许您可​​以尝试类似:

sed -e 's/(click here [^)]*)//'

答案 1 :(得分:2)

使用perl,您可以运行:

perl -00 -pe "s/\(click here [^)]*\)//g" inputfile > outputfile

它将读取字符串中的inputfile,然后替换所有出现的(click here anychar but '(' ),然后在outputfile中输出all。

答案 2 :(得分:1)

这是另一种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;}'