在模式的第一個字母後面插入文本

在模式的第一個字母後面插入文本

如何/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)

該命令說:

選擇括號之間的內容並捕獲它(可以以斜線開頭/),然後將(or替換(//foo/捕獲的模式

答案3

使用awk

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

sed

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

這使用反向引用 \1 for(和 \2 為bar

相關內容