我使用该命令在当前目录中的php文件的开头添加一行,并递归地添加其子目录.
find . -name "*.php" -exec sed -i -e "/<?php/a\\
Sometext" *.php \;
Run Code Online (Sandbox Code Playgroud)
但它只Sometext在当前目录(而不是全部)的php文件中添加了许多次(而不是一次).我做错了什么?
您不会将找到的文件传递find给sed命令,而是传递shell glob找到的文件*.php.在find执行之前,*.php会扩展并且您的命令变为
find . -name '*.php' -exec sed ... 1stMatch.php 2ndMatch.php ... \;
Run Code Online (Sandbox Code Playgroud)
之后,find将为每个找到的文件执行命令
sed ... 1stMatch.php 2ndMatch.php ...
你可能想写
find . -name '*.php' -exec sed -i -e '/<?php/a\\
Sometext' {} \;
Run Code Online (Sandbox Code Playgroud)
对于每个文件,find执行sed并替换{}一个文件名.在这种情况下,你甚至可以写{} +,而不是{} \;这样的sed上一次的所有文件只执行一次,而不是一次为每个文件-这将大大加快您的命令.
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |