2017-10-28 151 views
0
sed -i s/oldstr/newstr/g 

我想用目录中的新字符串替换所有旧字符串。当我执行这个命令时,它显示所有的字符串在控制台上被更改为新的字符串。但是当我输入文件并检查时,旧字符串仍然保持不变。请帮忙弄清楚这个问题虽然使用sed替换字符串,但更改不适用于文件

+0

欢迎来到堆栈溢出,你传递给了这个'sed'命令的是什么?请输入您的输入文件或'* *号码。 – RavinderSingh13

+0

根据您的sed版本,您可能需要使用'-i'选项 - 请参阅https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac- bsd-and-linux ....另外,作为一种很好的做法,在命令'sed -i.bkp's/oldstr/newstr/g''上使用单引号' – Sundeep

+0

你试过'cat file | sed -i's/oldstr/newstr/g''?使用该文件作为参数'sed -i's/oldstr/newstr/g'文件' –

回答

0
#> sed -i \.orig 's/old/new/g' file 

这应该是一样:

#> mv file file.orig 

#> sed 's/old/new/g' file.orig > file. 
+0

谢谢。 为什么sed's/old/new/g'*不会改变所有文件中的字符串(显然sed的/ old/new/g'file.orig>文件工作正常) – Krish

+0

可能是为了防止我们捣毁一堆文件和不得不访问备份... d8) – JDQ

0

如果你是在MacOS上,你可以尝试:

sed -i '' 's/oldstr/newstr/g' your-file 

从男人:

就地编辑文件,使用指定的扩展名保存备份。如果给定零长度扩展,则不会保存备份。

因此,通过使用-i ''它不会创建备份并将更改应用到您的文件。

保持这可能是用来备份:

sed -i.bak 's/oldstr/newstr/g' your-file 

要更换多个文件oldstr,你可以这样做:

perl -pi -e 's/oldstr/newstr/g' * 

保留的备份:

perl -i.bak -p -e 's/oldstr/newstr/g' *