2010-03-26 35 views
24

我有一個重命名的js文件,我必須在每個php頁面中調用它。現在我想用新的shell替換舊的名稱。 什麼用IAM是這樣的: -使用單行shell命令替換所有文件中的特定文本

sed -i ’s/old/new/g’ * 

,但這是給下面的錯誤: -

sed: -e expression #1, char 1: unknown command: 

現在我怎樣才能做到這一點?更換

回答

24

可能有更簡潔的解決方案,但在這裏我們去:

for i in *; do sed -i 's/old/new/g' "$i"; done 

你要知道,它只會在文件系統的當前水平的工作,在子目錄中的文件將不會被修改。另外,你可能想用* .php替換*,或者做備份(在-i之後傳遞一個參數,並且它將使用給定的擴展名進行備份)。

+0

哼。在OSX上得到了'我期望的命令\後跟文本' – jamescampbell 2018-02-27 04:10:55

-2

試試這個:

ls | grep "php" > files.txt 
for file in $(cat files.txt); do 
    sed 's/catch/send/g' $file > TMPfile.php && mv TMPfile.php $file 
done 
+2

ls/grep/cat沒用。 '用於* .php中的文件;做...;完成' – ghostdog74 2010-03-26 11:52:49

+1

不知道無用 - 但它是一個非常醜陋的方法,那麼事實上,使用固定的臨時文件名(files.txt,TMPfile.php)如果有任何併發​​,將會中斷。 – symcbean 2010-03-26 12:17:38

3
perl -pi -e 's/old/new/g' *.php 
+0

在OSX'zsh:參數列表中出現錯誤太長:perl' – jamescampbell 2018-02-27 04:12:04

+0

剛剛在zsh OSX上測試過並且適用於我。 – radio4fan 2018-02-27 10:56:34

40
sed -i.bak 's/old/new/g' *.php 

做遞歸

find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +; 
+0

這給出了錯誤「FIND:Invalid switch」 – 2017-10-27 11:34:44

8

您正在使用Unicode撇號(右單引號 - U2019),而不是ASCII(0×27)您的sed命令參數周圍的撇號。

0

這是一個非常簡單的,沒有對或環路,一個照顧任何數量或嵌套目錄

grep -rl oldText [folderName-optional] | xargs sed -i s/oldText/newText/g

相關問題