我有一个被重命名的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或loop,适用于任何数量或嵌套目录。
grep -rl '旧文本' [文件夹名称-可选] | xargs sed -i 's/旧文本/新文本/g'
grep -rl 'oldText' . | xargs sed -i 's/oldText/newText/g'
- user7154703你在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
zsh:参数列表太长:perl
。 - james-seefor 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
sed -i''-e'...'
在 FreeBSD 11.3 上替换了文件中的内容,具体方法可以参考 https://dev59.com/-Wcs5IYBdhLWcg3woFbt 中的回答。 - Piohen