パターンの最初の文字の後にテキストを挿入します

パターンの最初の文字の後にテキストを挿入します

/foo/開き括弧の後にのみ挿入するにはどうすればよいでしょうか?

(bar)

なるべきです

(/foo/bar)

一方、(/baz/bar)すべきであるないなる(/baz/foo/bar)

答え1

この単純なケースでは、

sed 's,(bar,(/foo/bar,'

答え2

複雑な方法ですが、追加したい/foo/場合どれでも括弧内のパターン:

$ echo '(bar)' | sed 's;(/*\([^(]*\);(/foo/\1;'
(/foo/bar)

$ echo '(/bar/baz)' | sed 's;(/*\([^(]*\);(/foo/\1;'
(/foo/bar/baz)

コマンドは次のようになります:

括弧内のものを選択してキャプチャし(スラッシュで始まる場合もあります/)、キャプチャしたパターン(または(/を置き換えます。/foo/

答え3

使用方法awk:

awk '/\(bar/ {sub(/bar/, "/foo/bar"); }1' input

sed

sed -E 's%([(])(bar)%\1/foo/\2%' input

これは、 にバック参照 \1 を使用し(、 に \2 を使用しますbar

関連情報