我见过很多在多个文件中用一个字符串替换另一个字符串的例子,但我想做的是有点不同。可能更简单:)
查找与特定字符串匹配的所有文件,并将其完全替换为新文件的内容。
我有一个有效的find命令
find /home/*/public_html -name "index.php" -exec grep "version:1.23" '{}' \; -print
这会找到我需要更新的所有文件。 现在我如何用/home/indexnew.txt的内容替换他们的整个内容(我也可以将其命名为/home/index.php)
我强调内容,因为我不想更改我正在更新的文件的名称或所有权。
答案 0 :(得分:1)
find ... | while read filename; do cat static_file > "$filename"; done
效率提示:使用grep -q
- 当找到第一个匹配时,它将立即返回“true”,而不必读取整个文件。
答案 1 :(得分:0)
如果您想要替换一堆文件,并且可以使用通配符获取所有名称,则可以尝试将输出输出到tee命令:
cat my_file | tee /home/*/update.txt
这应该查看/ home中的所有目录,并将my_file中的文本写入每个目录中的update.txt。
如果这有助于或不是您想要的,请告诉我。
答案 2 :(得分:0)
我不确定你的命令是否没有-l
然后打印它比直接在列表文件中添加-l
更好。
find /home/*/public_html -name "index.php" -exec grep -l "version:1.23" '{}' \; |xargs -i cp /home/index.php {}
以下是选项-l
详细信息
-l, --files-with-matches
Suppress normal output; instead print the name of each input
file from which output would normally have been printed. The
scanning will stop on the first match. (-l is specified by
POSIX.)