【发布时间】:2015-04-10 23:37:41
【问题描述】:
我正在尝试递归循环我的项目文件夹,grep 每个 PHP 文件,并找到与 xdebug_break(); 匹配的任何字符串。
然后我想删除那个xdebug_break()(我也接受用空格替换)。
这是我目前得到的:
#!/bin/bash
FILES=$(find ../../Dev/projects/api -type f -name *.php)
for f in $FILES
do
if grep -nr "xdebug_break();" $f
then
sed -e '/xdebug_break();/d' -i $f
echo "xdebug_break(); has been deleted."
fi
done
一切正常,除了替换部分。我不断收到此错误:
sed: -i may not be used with stdin
我不在乎它是 sed 还是 awk 或其他什么(但我确实使用 mac)。
谢谢,
解决方案(面向未来的读者)
感谢大家的帮助(ESP @anubhava)。这一行技巧为我做到了:
find ../../Dev/projects/api -type f -name "*.php" -exec sed -i '' '/xdebug_break();/d' {} +
你也可以这样循环(如果你真的想要的话):
#!/bin/bash
FILES=$(find ../../Dev/projects/api -type f -name *.php)
for f in $FILES
do
if grep -nr "xdebug_break();" $f
then
sed -i '' '/xdebug_break();/d' "$f"
echo "xdebug_break(); has been deleted."
fi
done
【问题讨论】: