-ジ

-ジ

-zsedを使用すると、nullデータパターン()を使用してn番目のパターン発生を一致させることができることを学びましたsed -z 's/foo/bar/2'

を使用するときに行の先頭を一致させる方法は-z

私が実行している場合:

echo $'foo\nfoo\nfoo' | sed -z 's/^foo/baz/2'

^文字列全体の先頭が表示されるため、置換はありません。

$ echo $'foo\nfoo\nfoo' | sed -z 's/^foo/baz/g'
baz
foo
foo

Perlには次のものがあります。m正規表現修飾子(音を出すとき)しかし、sedでは役に立ちません。

ベストアンサー1

echo $'foo\nfoo\nfoo' | sed -Ez 's/(^|\n)foo/\1baz/2'

^最初の行の先頭に何が起こるかを正確に計算する必要がありますfoo

コードでは(^|\n)fooなくの発生回数を計算しますfoo。 sを計算したいのですが、foo交換したい場合ただ目的の項目が行の先頭にある場合、このコードは解決策ではありません。たとえば、

echo $'foo foo\nfoo foo\nfoo foo' | sed -Ez 's/(^|\n)foo/\1baz/3'

彼が交換されたのはfoo今回が三番目ではないfoo

GNU 4.8を使用してsedテストされました。

おすすめ記事