查找并替换多个文件,使用一个文件作为输入来查找,使用另一个文件作为输入来替换

查找并替换多个文件,使用一个文件作为输入来查找,使用另一个文件作为输入来替换

我需要替换一些 php 脚本中的几段文本......

我有:

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

这个有用,但我有大约 2 或 3 行的文本。

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

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

就像是:

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

布鲁诺

答案1

不幸的是,我无法找到一个具体的命令,但也许xargs实用程序会派上用场。它执行文本文件的行或stdin命令。例如,以下命令打印有关当前目录中所有文件的文件信息:

/bin$ ls | xargs file
bash:             ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x6c2d022503edd4e409032f33bffbcb66d2546ea5, stripped
...

答案2

不确定我是否理解了这个问题,但是如果你的意思是你想在单个命令中查找/更改多个项目,那么也许这可以满足你的需要:

find . -name "*.php" -exec grep -l -E 'finditem1|finditem2|finditem3' {} \; -exec sed -i -e "s/finditem1/replitem1/" -e "s/finditem2/replitem2/" -e "s/finditem3/replitem2/" {} \;

此外,grep 和 sed 都接受文件作为输入,但您必须为 grep 匹配和 sed 命令创建 2 个不同的文件。awk 或 perl 也可能是替代方案。

相关内容