9

約500文字の行から読んでいます。その文字列を何かに置き換える代わりに、行の残りの部分を何かに置き換えるにはどうすればよいですか? 要するに、指定された文字列の周りのすべてのテキストを削除したいのです。一致した文字列の前後に不確定な量の文字があるため、awk を使用した列の削除は機能しません。何か案は?

4

1 に答える 1

11

後方参照を使用してみてください:

sed 's/.*\(searchstring\).*/___\1___/'

検索文字列の前後の.*'s は文字列以外のすべてに一致し、括弧はsed一致したものを記憶するように指示します。で最初に一致した文字列を参照できます\1

以下に例を示します (「bar baz」以外のすべてを置き換えます):

$ echo "foo bar baz qux" | sed 's/.*\(bar baz\).*/___\1___/'
___bar baz___

上記の 'bar baz' を好きなパターンに置き換えることができます。簡単にするために基本的な文字列を使用しました。

于 2009-04-11T04:00:18.347 に答える