如何/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 for bar
。