Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sed/awk或任何shell命令替换双字符串版本_Shell_Awk_Sed - Fatal编程技术网

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

使用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.

下面是行,我已经保存在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 
$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