Search and Replace String from text file Ubuntu

时间:2016-08-30 04:48:12

标签: regex awk sed grep xargs

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.

1 个答案:

答案 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,因此无需转义(。使用\(意味着捕获组的开始,因此当它找不到结束时的错误\)