0

次のようなテキストを入力したいと思います。

foo
stuff
various stuff
could be anything here
variable number of lines
bar
Stuff I want to keep
More stuff I want to Keep
These line breaks are important

これを取得します:

 foo
 teststuff
 bar
 Stuff I want to keep
 More stuff I want to Keep
 These line breaks are important

これまでのところ、sed、grep、およびpcregrepを使用して読み、いじりましたが、機能させることができませんでした。おそらく Vim でそのようなことを行うことができるように見えますが、Vim を使用したことがないので、王様の痛みのように見えます。

私が試したことは次のとおりです。

sed -e s/foo.*bar/teststuff/g -i file.txt

pcregrep -M 'foo\s+bar\s' file.txt | xargs sed 's/foo.*bar/teststuff/g'

これらのコマンドを正しく使用していないだけなのか、それとも間違ったツールを使用しているのかはわかりません。ターミナルを使用して、行にまたがるワイルドカードを見つけて置き換える方法がないとは信じがたいです。

4

3 に答える 3

1

GNU sed でこれを試してください:

sed -e '/^foo/,/^bar/{/^foo/b;/^bar/{i teststuff' -e 'b};d}'

見る:man sed

于 2015-08-23T07:52:56.223 に答える
1

明確さ、シンプルさ、堅牢性、保守性、移植性、およびその他のソフトウェアの望ましい品質を得るには、awk を使用します。

$ awk 'f&&/bar/{print "teststuff";f=0} !f; /foo/{f=1}' file
foo
teststuff
bar
Stuff I want to keep
More stuff I want to Keep
These line breaks are important
于 2015-08-23T18:53:38.237 に答える