使用file作为搜索和替换的输入来查找和替换shell

时间:2014-07-15 11:13:26

标签: linux bash shell replace find

我需要在一些php脚本中替换几个文本块...

我有:

find . -name 'products.php' -exec grep --silent 'TEXT_TO_FIND' {} \; -exec ls {} \; -exec sed -i 's/TEXT_TO_FIND/REPLACE_TEXT/g' {} \;

这项工作,但我有大约2 ou 3行的文字..

所以我记得用我的查找文本创建一个find.txt,用替换文本创建另一个replace.txt ..

我的问题是...... 如何在上述命令中将此文件用作输入..

类似的东西:

find . -name 'products.php' -exec grep --silent `cat find.txt` ...

祝你好运 布鲁诺

1 个答案:

答案 0 :(得分:0)

你可能不得不采用比pure-bash / coreutils更面向数据的东西。如果您可以访问您网站上的Python:

#!/bin/python
with open("find.txt","r") as f:
    fs = f.read().trim("r")

with open("replace.txt","r") as f:
    rs = f.read().trim()


# you probably have to loop other the following lines
# Once for every file:
with open("src.txt","r") as f:
    src = f.read()

modified = src.replace(fs,rs)
if modified := src:
    with open("src.txt","w") as f:
        f.write(modified)

这只是一个起点。你可能需要改进它。如果你被困在某事上,请随意提出另一个问题!


以下是我测试的成绩单:

sh$ cat src.txt 
AAA
BBB
CCC
DDD
CCC
DDD
EEE
FFF
sh$ cat find.txt 
CCC
DDD
EEE
sh$ cat replace.txt 
XXX
YYY
ZZZ
sh$ python m.py
sh$ cat src.txt 
AAA
BBB
CCC
DDD
XXX
YYY
ZZZ
FFF