【问题标题】:replace many different types of strings in hundres of files在数百个文件中替换许多不同类型的字符串
【发布时间】:2014-03-11 18:32:38
【问题描述】:

我在同一个文件夹下的数百个文件中搜索和替换大约 50 种不同类型的字符串。我想将要替换的字符串放在inputs.txt 文件中,然后使用findsed 命令在很多文件中用“_modify”替换每个输入字符串。

这是我想要做的一个简单的例子:

1) 要搜索的字符串保存在inputs.dat中:

  string1
  string2
  string3

  string50

2)test1.txt 和 test2.txt 现在是相同的 这是字符串1 这是字符串2 这是别的东西 这是字符串3 这是字符串50

3) 我尝试将所有 sed 命令链接在一起,以递归方式替换所有字符串,如下所示,但如果字符串变得很大,则工作量很大。我认为 perl+sed 应该可以工作,但我还不知道如何将它们组合在一起。 $查找。 -name "*.txt" -print | xargs sed -i 's/^string1$/strng1_modify/g'

3) 我尝试了下面建议的 sed 脚本,但在 bash 中运行时出现了一些错误。看起来 sed 在处理多行时遇到了问题。
$sed_program=$(sed 's#.+#s/&/\&_modify/g#' inputs.dat)

$查找。 -type f -print | xargs -0 sed -i "$sed_program"

错误信息:“$sed: -e expression #1, char 13: unterminated `s' command”

【问题讨论】:

  • 显示您尝试过的内容以及遇到问题的地方。
  • 你知道你可以像sed 's/a/b/g;s/d/e/;.....;' file这样在sed中链接子命令吗?祝你好运。

标签: perl sed


【解决方案1】:

我会将输入文件转换为 sed 脚本:

假设你的 shell 是 bash/ksh/zsh,你可以这样做:

sed_program=$( sed 's#.+#s/&/\&_modify/g#' inputs.txt )
find . -type f -print0 | xargs -0 sed -i "$sed_program"

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2022-12-15
    • 2017-01-06
    • 2019-01-07
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多