9

我正在阅读大约 500 个字符的行。我怎样才能得到 sed,而不是用某些东西替换该字符串,而是用某些东西替换该行的其余部分?简而言之,我想删除指定字符串周围的所有文本。用 awk 删除列是行不通的,因为在匹配的字符串之前和之后有不确定数量的字符。有任何想法吗?

4

1 回答 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 回答