我想递归循环我的项目文件夹,grep
每个PHP文件并找到匹配xdebug_break();
的任何字符串。Shell脚本Mac:通过目录循环并删除字符串
然后我想删除那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)。
感谢,
SOLUTION(FOR未来的读者)
感谢大家的帮助(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
反正不创建.bak文件使用SED? @anubhava – Shade 2015-02-10 19:33:57
是的,当然。您可以使用'sed -i'''/ xdebug_break();/d'“$ f”' – anubhava 2015-02-10 19:35:16
一行应该是:'find ../../Dev/projects/api-type f -name“*。 php“-exec sed -i'''/ xdebug_break();/d'{} +'否则:''find ../../Dev/projects/api-type f -name”* .php“ - exec sed -i'''/ xdebug_break();/d'{} \;'' – anubhava 2015-02-10 19:36:21