[英]Shell Script Mac: Loop through Directory and Remove String
我试图递归地循环我的项目文件夹, grep
每个PHP文件并找到与xdebug_break();
匹配的任何字符串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
在OSX上,您的sed
命令应为:
sed -i.bak '/xdebug_break();/d' "$f"
.bak
是扩展名,用于.bak
联编辑中创建输入文件的备份。
您可以避免循环,并且find
像这样进行一次find
:
find ../../Dev/projects/api -type f -name "*.php" \
-exec sed -i.bak '/xdebug_break();/d' {} +
您可以结合使用find
和sed
:
find Dev/projects/api -type f -name '*.php' -exec sed -i.bak '/xdebug_break();/d' {} \;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.