我需要替换一些 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 也可能是替代方案。