-z
sedを使用すると、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
テストされました。