使用sed/awk或任何shell命令替换双字符串版本
下面是行,我已经保存在test.txt文件中使用sed/awk或任何shell命令替换双字符串版本,shell,awk,sed,Shell,Awk,Sed,下面是行,我已经保存在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.
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
$a=“fromuser=abcd tuser=efgh file=foo_v1.0.0_2017.03.22.dmp log=foo_v1.0.0_2017.03.22.log”
$sed-r's/(\u v[0-9]*\.[0-9]*\.[0-9]*.\u)/\u version\./g'您的问题不清楚。。。请参阅,并请将上述行保存在test.txt文件中,然后尝试运行sed命令。如果运行sed-i的/foo_.*.log/foo_version.log/g'test.txt,它将更改file=foo_v1.0.0.dmp。我想更改这个l log=foo_v1.0.0.log添加您的预期输出以保持清晰。。你真的需要经历。。。从您的sed命令来看,我认为问题在于使用*
将尽可能多地匹配…从您的示例来看,一个简单的sed's/v1\.0\.0/version/g'
应该可以做到这一点。。如果这不起作用,你需要给出更好的例子……试试这个-sed's/1.0.0/version/g'f