两个字符串版本使用 sed/awk 或任何 shell 命令替换



波纹管是我保存在test.txt文件中的行

fromuser=abcd touser=efgh file=foo_v1.0.0_2017.03.22.dmp log=foo_v1.0.0_2017.03.22.log   

我需要从文件和日志中替换1.0.0,正如你看到的"foo"这个名字是相同的,版本每次都会改变。

期望输出:

fromuser=abcd touser=efgh file=foo_version.2017.03.22.dmp log=foo_version.2017.03.22.log

有了这个,这似乎没问题。确保向 sed 提供-r-E命令行开关,以启用扩展正则表达式支持。

$ a="fromuser=abcd touser=efgh file=foo_v1.0.0_2017.03.22.dmp log=foo_v1.0.0_2017.03.22.log"
$ sed -r 's/(_v[0-9]*.[0-9]*.[0-9]*_)/_version./g' <<<"$a"
#Output
fromuser=abcd touser=efgh file=foo_version.2017.03.22.dmp log=foo_version.2017.03.22.log    
$ b="fromuser=abcd touser=efgh file=foo_v122.10.100_2019.11.99.dmp log=foo_v133.530.30001_201.3.0.log"
$ sed -r 's/(_v[0-9]*.[0-9]*.[0-9]*_)/_version./g' <<<"$b"
#Output
fromuser=abcd touser=efgh file=foo_version.2019.11.99.dmp log=foo_version.201.3.0.log 

如果由于某种原因,您的sed版本无法如上所述工作,您也可以使用perl。
只需将sed -r替换为perl -pe保持其余代码相同,即可在所有配备 perl 的系统中以相同的方式提供所需的结果。

相关内容

最新更新