Sed追加正则表达式捕获组 [英] Sed append regex capture groups
本文介绍了Sed追加正则表达式捕获组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果有人可以提供帮助,我正在尝试使用正则表达式和捕获组执行sed附加操作,但操作不完全:
echo#baseurl = http://mirror.centos.org/centos/$releasever/contrib/$basearch/" |sed -re'/#baseurl=http:\/\/mirror.centos.org(.*)/a baseurl = https:\/\/10.10.10.10 \ \ 1'#baseurl = http://mirror.centos.org/centos//contrib//baseurl = https://10.10.10.10 1
目前,它只是给文字值1而不是捕获组.
它应该给出:
#baseurl = http://mirror.centos.org/centos//contrib//baseurl = https://10.10.10.10/centos//contrib//
我也尝试了反斜杠括号,但是它不起作用.请协助....因为它现在伤了我的头...
解决方案
仅当在 sed
中使用 s
(替代)命令时,才能捕获向后引用.>
这应该有效:
s =#baseurl = http://mirror.centos.org/centos/$releasever/contrib/$basearch/"sed -r's〜#baseurl = http://mirror \ .centos \ .org(.*)〜& \ nbaseurl = https://10.10.10.10 \ 1〜'<<<"$ s"#baseurl = http://mirror.centos.org/centos//contrib//baseurl = https://10.10.10.10/centos//contrib//
If someone can please assist, I'm trying to do a sed append using regex and capture groups but its not working fully:
echo "#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/" | sed -re '/#baseurl=http:\/\/mirror.centos.org(.*)/a baseurl=https:\/\/10.10.10.10\ \1'
#baseurl=http://mirror.centos.org/centos//contrib//
baseurl=https://10.10.10.10 1
At the moment it is just giving the literal value 1 rather than the capture group.
It should give:
#baseurl=http://mirror.centos.org/centos//contrib//
baseurl=https://10.10.10.10/centos//contrib//
I have tried backslash parentheses as well but its not working. Please assist....as it is hurting my head now...
解决方案
You can only capture back-reference when using s
(substitute) command in sed
.
This should working:
s="#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/"
sed -r 's~#baseurl=http://mirror\.centos\.org(.*)~&\nbaseurl=https://10.10.10.10\1~' <<< "$s"
#baseurl=http://mirror.centos.org/centos//contrib//
baseurl=https://10.10.10.10/centos//contrib//
这篇关于Sed追加正则表达式捕获组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文