如何在文件中递归bash添加一行?

时间:2018-11-13 15:28:27

标签: bash

我使用该命令以递归方式在当前目录及其子目录的php文件的开头添加一行。

    find . -name "*.php" -exec sed -i -e "/<?php/a\\
Sometext" *.php \;

但是它仅在当前目录(而不是全部)的php文件中添加Sometext多次(而不是一次)。我做错了什么?

1 个答案:

答案 0 :(得分:5)

您不会将find找到的文件传递给sed命令,而是将shell glob *.php找到的文件传递给。在执行find之前,请展开*.php,您的命令将变为

find . -name '*.php' -exec sed ... 1stMatch.php 2ndMatch.php ... \;

然后,find将为找到的每个文件执行命令

sed ... 1stMatch.php 2ndMatch.php ...

您可能想写

find . -name '*.php' -exec sed -i -e '/<?php/a\\
Sometext' {} \;

对于每个文件,find执行sed并将{}替换为一个文件名。 在这种情况下,您甚至可以编写{} +而不是{} \;,这样sed一次对所有文件执行一次,而不是对每个文件执行一次–这样可以加快命令的执行速度