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