【发布时间】:2011-07-29 11:54:10
【问题描述】:
我希望 sed 省略所有不匹配的行,并且只输出被替换的字符串(单个/多个预期的行)。
换句话说:我有一堆干草,我只想把针归还,而不是所有的干草都被搜索过并且保持不变。
或者换句话说: 在多行字符串中搜索/替换正则表达式描述的字符串,并且只返回该字符串。 (通过 PHP 函数 http://www.php.net/manual/en/function.preg-replace.php 可以实现)
我目前的解决方法是先用 grep 过滤,然后只用管道将匹配的行输入 sed 进行替换:
echo -e "Bla\nBla\nImportant1: One \nBla\nImportant2: Two\nBla\nBla" | egrep "^Important1.*$" | sed -E "s/^Important1: *\b(.*)\b */\1/g"
# From the multiple line input I only want the "One One" (with pre/post whitespace removed, hence matching the word boundaries with "\b")
# And I want no "Bla bla" lines in the result!
但我希望有一个在 sed 中的单一解决方案。还是这超出了 sed 的预期用途,因此我应该更好地使用其他东西吗?顺便说一句,问题:multiline sed using backreferences 似乎有点相关,但我不确定!
【问题讨论】:
标签: regex sed replace multiline