在数百个文件中替换许多不同类型的字符串

时间:2014-03-11 18:32:38

标签: perl sed

我有大约50种不同类型的字符串可以在同一文件夹下的数百个文件中进行搜索和替换。我希望将字符串替换为inputs.txt文件,然后使用findsed命令将每个输入字符串替换为" _modify& #34;在许多文件中。

以下是我想要做的一个简单示例:

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

  string1
  string2
  string3

  string50

2)test1.txt和test2.txt现在是理想的       这是string1       这是string2       这是另一回事       这是string3       这是string50

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

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

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

错误消息:" $ sed:-e expression#1,char 13:unterminated s'命令"

1 个答案:

答案 0 :(得分:2)

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

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

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