Linux 使用sed更改文件中的字符串?

Linux 使用sed更改文件中的字符串?,linux,sed,awk,gawk,Linux,Sed,Awk,Gawk,我有一个输入文件,模板如下所示。我想更改版本:使用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 目前,我

我有一个输入文件,模板如下所示。我想更改版本:使用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-m1 version inputfile|sed's/[:\uz#a-zA-Z\s”]*//g'
获取当前版本,并试图用
sed's/3.1.0.2-1/3.1.0.2/'inputfile

然而,这似乎不起作用,但当我在命令行中使用echo尝试它时,它就起作用了。
echo'版本:3.0.9.1'| sed's/3.0.9.1/3.2.9.2/'

Output: Version: 3.2.9.2
任何关于我如何能做到这一点的帮助将不胜感激。最好是我想改变文件中没有得到当前版本的版本


提前感谢

如果您有输入错误,最后一个点应该是破折号,请尝试以下操作:

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

sed的名称
sed
字面上来自“流编辑器”-您看到的行为就是它的设计方式。当您说:

sed 'some commands' file
它读取文件,执行命令并打印结果-它不会将其保存回文件(尽管某些版本的
sed
有一些选项可以告诉它这样做)。您可能希望执行以下操作:

sed 'some commands' file > newfile

然后验证<代码> NexFix是正确的,然后<代码> MV NeWFLASH文件。如果你绝对确定你的编辑脚本是正确的,并且你可以处理错误的数据重写你的文件的结果,如果不是,那么你可以考虑使用现成的编辑标志,但是保存到TimaA通常更安全。您要使用“-i”开关切换到sed以进行“编辑文件[i]n位置”


请参阅sed手册页:

您不需要grep

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

很抱歉,我的bash脚本中的错误是打字错误,它是正确的。不过谢谢你指出。这是我的方式,有更好的方式吗?我发现-我不太信任