我有一个重命名的js文件,我必须在每个php页面调用。现在我想使用shell替换旧名称。 我使用的是: -
sed -i ’s/old/new/g’ *
但是这会产生以下错误: -
sed: -e expression #1, char 1: unknown command:
现在我该如何替换?
答案 0 :(得分:49)
sed -i.bak 's/old/new/g' *.php
以递归方式执行
find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +;
答案 1 :(得分:27)
可能没有那么冗长的解决方案,但我们走了:
for i in *; do sed -i 's/old/new/g' "$i"; done
请注意,它只适用于文件系统的当前级别,子目录中的文件不会被修改。此外,您可能希望将*替换为* .php,或者进行备份(在-i之后传递参数,它将使用给定的扩展名进行备份)。
答案 2 :(得分:9)
您在sed
命令参数周围使用的是Unicode撇号(RIGHT SINGLE QUOTATION MARK - U2019)而不是ASCII(0x27)撇号。
答案 3 :(得分:7)
这个非常简单,没有for或loop,并且处理任何数字或嵌套目录
grep -rl 'oldText' [folderName-optional] | xargs sed -i 's/oldText/newText/g'
答案 4 :(得分:4)
perl -pi -e 's/old/new/g' *.php
答案 5 :(得分:2)
为完整起见,请提供上述接受的答案的OSX兼容版本(以回答@jamescampbell的评论)
for i in *.php; do sed -i .orig 's/old/new/g' "$i"; done
此命令创建.orig
备份文件。
答案 6 :(得分:2)
我知道我真的很晚,但仍然:
find . -type f -name "*.php"|xargs sed -i 's/old/new/g'
答案 7 :(得分:0)
使用双引号
sed -i "s/old/new/g" *
答案 8 :(得分:-3)
试试这个:
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