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

时间:2017-04-06 05:48:01

标签: shell awk sed

Bellow是这行,我保存在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

1 个答案:

答案 0 :(得分:0)

有了它,似乎没关系。确保为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的系统中以提供所需结果的相同方式工作。