【问题标题】:Sed append regex capture groupsSed 附加正则表达式捕获组
【发布时间】:2016-12-30 10:28:42
【问题描述】:

如果有人可以提供帮助,我正在尝试使用正则表达式和捕获组进行 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//

我也尝试过反斜杠括号,但它不起作用。请协助....因为它现在正在伤害我的头...

【问题讨论】:

    标签: regex bash sed capture-group


    【解决方案1】:

    您只能在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//
    

    【讨论】:

    • 做得非常好(我之前 +1 了)。为什么反向引用仅用于替代模式?我找不到这方面的参考资料。
    • 我相信除了替代模式之外,只有/search/ 允许使用正则表达式和组,因为没有替代品,我们不能使用反向引用。
    • 谢谢,我做了 sed 和 s 并做了两个捕获组 (...(.*)) 并打印了 \1\nxyz\2 ,这与你的差不多!还是谢谢!
    猜你喜欢
    • 2020-03-14
    • 2020-09-14
    • 2018-03-11
    • 1970-01-01
    • 2012-10-19
    • 2015-08-06
    • 2021-11-14
    相关资源
    最近更新 更多