【发布时间】:2010-10-18 21:02:21
【问题描述】:
我正在阅读大约 500 个字符的行。我怎样才能得到 sed,而不是用某些东西替换该字符串,而是用某些东西替换该行的其余部分? 简而言之,我想删除指定字符串周围的所有文本。用 awk 删除列是行不通的,因为在匹配的字符串之前和之后有不确定数量的字符。 有什么想法吗?
【问题讨论】:
我正在阅读大约 500 个字符的行。我怎样才能得到 sed,而不是用某些东西替换该字符串,而是用某些东西替换该行的其余部分? 简而言之,我想删除指定字符串周围的所有文本。用 awk 删除列是行不通的,因为在匹配的字符串之前和之后有不确定数量的字符。 有什么想法吗?
【问题讨论】:
尝试使用反向引用:
sed 's/.*\(searchstring\).*/___\1___/'
搜索字符串周围的.* 将匹配除字符串之外的所有内容,括号告诉sed 记住它匹配的内容。您可以使用\1 引用第一个匹配的字符串。
这是一个示例(替换除“bar baz”之外的所有内容):
$ echo "foo bar baz qux" | sed 's/.*\(bar baz\).*/___\1___/'
___bar baz___
你可以用上面任何你喜欢的模式替换'bar baz';为了简单起见,我只是使用了一个基本字符串。
【讨论】: