2013-03-20 72 views
0

這是我想翻譯成zsh的函數,該函數全局搜索和替換字符串命令:如何把這個命令轉換爲zsh的功能

find ./ -type f -exec sed -i 's/string1/string2/' {} \; 

我想:

gr() { 
    find ./ -type f -exec sed -i 's/$1/$2/' {} \; 
} 

但它似乎並沒有工作。

+0

沒有您輸出的輸出不是很有幫助。你怎麼知道它不工作?你有調試設置運行zsh函數嗎?調用時的輸出是什麼? – mdpc 2013-03-21 01:15:53

回答

4

顯而易見的錯誤是錯誤的引用 - 一如既往。 '阻止shell擴展變量,這正是你想要的。使用"而不是 - 也許你還想要全球標誌的sed:

gr() { 
    find ./ -type f -exec sed -i "s/$1/$2/g" {} \; 
} 

然而,這是不是很zsh -stylish ...以下是短,恕我直言,更好的閱讀:

gr() { 
    sed -i "s/$1/$2/g" **/*(.) 
} 
  • **遞歸搜索,但不跟隨符號連接(使用***如果你想要那個)
  • (.)李將結果映射到純文件
+0

謝謝!有用! – 2013-03-21 16:16:38

+0

如果之前或之後的文本包含'/',請小心;一定要逃脫他們。例如,「gr」米每秒「」m \/s「' – chepner 2013-03-24 02:40:51

+1

或使用'sed -i's#$ {1 //#/ \\#}#$ {2 //#/ \\#} #g「**/*(。)'。這很醜陋,但會確保兩個參數中匹配'sed'分隔符的任何字符都能正確轉義。 – chepner 2013-03-24 02:54:43