/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
。