我想遞歸循環我的項目文件夾,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