在模式的第一个字母后插入文本

在模式的第一个字母后插入文本

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

相关内容