我有大约50种不同类型的字符串可以在同一文件夹下的数百个文件中进行搜索和替换。我希望将字符串替换为inputs.txt
文件,然后使用find
和sed
命令将每个输入字符串替换为" _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'命令"
答案 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"