2010-03-26 39 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

相关问题