繁体   English   中英

Shell Script Mac:循环浏览目录并删除字符串

[英]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

我不在乎它的sedawk或其他什么(但我确实使用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' {} +

您可以结合使用findsed

find Dev/projects/api -type f -name '*.php' -exec sed -i.bak '/xdebug_break();/d' {} \;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM