使用单行shell命令替换中的所有文件的特定文本

问题描述 投票:29回答:9

我有我有我的每个PHP页面中调用一个重命名的JS文件。现在我想用外壳更换新老名称。 IAM使用这是什么: -

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

但是这给了以下错误: -

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

现在我怎么能做到这一点?更换

shell sed shellexecute
9个回答
28
投票

可能有更简洁的解决方案,但在这里我们去:

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

你要知道,它只会在文件系统的当前水平的工作,在子目录中的文件将不会被修改。此外,您可能要替换*带* .PHP,或进行备份(通过参数-i之后,它将使与该扩展备用)。


50
投票
sed -i.bak 's/old/new/g' *.php

做递归

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

9
投票

您正在使用Unicode的单引号(右单引号 - U2019),而不是ASCII(0×27)在你的sed命令参数撇号。


8
投票

这是一个非常简单的,没有对或环路,并采取任何数量或嵌套目录的护理

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


4
投票
perl -pi -e 's/old/new/g' *.php

2
投票

为了完整起见,提供上述接受的答案的OSX兼容版本(回答来自@jamescampbell评论)

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

此命令创建.orig备份文件。


2
投票

我知道,我真的很迟,但仍:

find . -type f -name "*.php"|xargs sed -i 's/old/new/g'

-1
投票

用双引号

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

-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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.