搜索并替换整个文件

时间:2014-02-20 20:27:52

标签: linux sed grep find exec

我见过很多在多个文件中用一个字符串替换另一个字符串的例子,但我想做的是有点不同。可能更简单:)

查找与特定字符串匹配的所有文件,并将其完全替换为新文件的内容。

我有一个有效的find命令

find /home/*/public_html -name "index.php" -exec grep "version:1.23" '{}' \; -print 

这会找到我需要更新的所有文件。 现在我如何用/home/indexnew.txt的内容替换他们的整个内容(我也可以将其命名为/home/index.php)

我强调内容,因为我不想更改我正在更新的文件的名称或所有权。

3 个答案:

答案 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.)