从文本文件搜索和替换字符串 Ubuntu

Search and Replace String from text file Ubuntu

我必须替换以下字符串

//@Config(manifest

使用以下字符串,

@Config(manifest

所以我按照正则表达式创建了这个

\/\/@Config\(manifest

并尝试了

grep -rl \/\/@Config\(manifest . | xargs sed -i "\/\/@Config\(manifest@Config\(manifest/g"

但我收到以下错误:

sed: -e expression #1, char 38: Unmatched ( or \(

我必须递归搜索并执行此操作,尽管我遇到了上述错误。

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