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