I have to replace following String
//@Config(manifest
with below string,
@Config(manifest
So this i created following regex
\/\/@Config\(manifest
And tried
grep -rl \/\/@Config\(manifest . | xargs sed -i "\/\/@Config\(manifest@Config\(manifest/g"
But i am getting following error:
sed: -e expression #1, char 38: Unmatched ( or \(
I have to search recursively and do this operation, though i am stuck with above error.
答案 0 :(得分:2)
grep -rl '//@Config(manifest' | xargs sed -i 's|//@Config(manifest|@Config(manifest|g'
.
grep -r
是可选的
sed
允许反斜杠或换行符以外的任何字符用作分隔符修改强>
如果文件名包含空格,请使用
grep -rlZ '//@Config(manifest' | xargs -0 sed -i 's|//@Config(manifest|@Config(manifest|g'
解释(假定GNU版本的命令)
<强>的grep 强>
-r
执行递归搜索-l
选项仅输出文件名而不是匹配的模式-Z
在每个文件名后输出零字节(ASCII NUL字符),而不是通常的换行符'pattern'
默认情况下,grep使用BRE(基本正则表达式),其中(
之类的字符没有特殊含义,因此无需转义 xargs -0
告诉xargs
用ASCII NUL字符分隔参数
<强> SED 强>
-i
就地编辑,如果要创建原始文件的备份,请使用-i.bkp
s|pattern|replace|g
g
标志告诉sed
搜索并替换所有匹配项。 sed
也默认为BRE,因此无需转义(
。使用\(
意味着捕获组的开始,因此当它找不到结束时的错误\)