更改文件中的字符串sed的?(Change a string in a file with sed?

2019-09-17 19:30发布

我有一个模板inputfile中,如下图所示。 我想改变的版本:使用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/' inputfile

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

Output: Version: 3.2.9.2

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

提前致谢

Answer 1:

你不需要grep的。

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


Answer 2:

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

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



Answer 3:

这个名字sed字面上来源于“流编辑器” -你看到的行为是其设计的方式。 当你说:

sed 'some commands' file

在读取文件,执行命令,并打印出结果-它不保存回文件(虽然某些版本sed有一些选项来告诉它这样做)。 你可能想这样做:

sed 'some commands' file > newfile

然后验证newfile是正确的,然后mv newfile file 。 如果你是绝对肯定你的编辑脚本是正确的,你可以处理覆盖有错误的数据文件的后果,如果他们没有,那么你可以考虑使用就地编辑的标志,但它通常比较安全,保存到一个临时文件,以便您可以测试/验证。



Answer 4:

你有一个错字,最后点应该是一个破折号,试试这个:

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


文章来源: Change a string in a file with sed?
标签: linux sed awk gawk