波纹管是我保存在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 的系统中以相同的方式提供所需的结果。