使用sed更改文件中的string?

我有一个模板input文件,如下所示。 我想改变版本:使用sed

Package: somename Priority: extra Section: checkinstall Maintainer: joe@example.com Architecture: i386 Version: 3.1.0.2-1 Depends: Provides: somename Description: some description 

目前,我正在使用grep -m 1 Version inputfile | sed 's/[:_#a-zA-Z\s"]*//g'获取当前版本 grep -m 1 Version inputfile | sed 's/[:_#a-zA-Z\s"]*//g'我试图用sed 's/3.1.0.2-1/3.1.0.2/' inputfilereplace当前的版本

但是,这似乎并没有工作,但是当我尝试在命令行使用回声工作。 echo 'Version: 3.0.9.1' | sed 's/3.0.9.1/3.2.9.2/'

 Output: Version: 3.2.9.2 

任何帮助我如何能做到这一点,将不胜感激。 最好我想改变版本,而不是在文件中获取当前版本。

提前致谢

Solutions Collecting From Web of "使用sed更改文件中的string?"

你不需要grep。

 sed -i '/Version/s/3\.1\.0\.2-1/3.1.0.2/' <files> 

你想使用“-i”开关sed“编辑文件[我] n的地方。

见sed手册页: http : //unixhelp.ed.ac.uk/CGI/man-cgi? sed

sed这个名字实际上来自“Stream EDitor” – 你所看到的行为就是它的设计方式。 当你说:

 sed 'some commands' file 

它读取文件,执行命令并打印结果 – 它不会将其保存回文件(尽管某些版本的sed有一些选项可以告诉它执行该操作)。 你可能想这样做:

 sed 'some commands' file > newfile 

然后验证新mv newfile file是否正确,然后mv newfile file 。 如果您完全确定您的编辑脚本是正确的,并且您可以处理用错误数据覆盖文件的后果,那么您可以考虑使用就地编辑标志,但通常更安全到一个临时文件,所以你可以测试/验证。

你有一个错字,最后一个小点应该是短划线,试试这个:

 sed 's/3.1.0.2-1/3.1.0.2-2/'