Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
maosu
V2EX  ›  Linux

V 友们,请教个提取两个字符串中的语句并加引号的 sed 写法

  •  
  •   maosu · Nov 3, 2022 · 3256 views
    This topic created in 1467 days ago, the information mentioned may be changed or developed.
    举个栗子:
    howdareyou

    我想提取出 dare 这个单词并给这个单词两边加上单引号,如下
    how'dare'you

    最近在自学 sed 的正则表达式,实在搞不定,来请教一下万能的 V 友,谢谢啦~

    很抱歉之前表述不太清楚,实际需求是 how 和 you 之间的语句是不确定的,需要提取这个不确定的语句并加上引号哈
    9 replies  •  2022-11-05 17:48:04 +08:00
    wxf666
    wxf666
    Nov 3, 2022
    1
    ```shell
    $ sed "s/dare/'&'/" <<<'howdareyou'
    how'dare'you
    ```
    iamzuoxinyu
    iamzuoxinyu
    Nov 4, 2022
    2
    一个快但可能不正确的方法:给 how 和 you 改成 how' 和 'you
    66Zi2nJk5Z6mdtzj
    66Zi2nJk5Z6mdtzj
    Nov 4, 2022 via iPhone
    3
    @iamzuoxinyu 跟你想到一块儿了
    dcsuibian
    dcsuibian
    Nov 4, 2022
    4
    sed 的正则表达式引擎比较弱
    建议用 awk ,有扩展的正则表达式引擎。

    其中对应你这个问题就是 group 分组和引用功能
    aijam
    aijam
    Nov 4, 2022❤️1
    5
    > echo howdareyou | sed -r "s/how(.+)you/how'\1'you/"
    how'dare'you
    huntagain2008
    huntagain2008
    Nov 4, 2022❤️1
    6
    #5 /how(.+)you/ 可能用的是“.“,跟用字母[a-zA-Z]匹配的结果完全不同 。当字符串很长,中间有一些干扰项,比如前面中间都有 how 、you ,结尾是 you ,中间明明是可以匹配好几个 how*****you 的,但是只匹配了第一个 how 和最后一个 you ,中间的各种 how****you 都没有打上引号,只给第一个 how 和最后一个 you 打了引号。
    maosu
    maosu
    OP
    Nov 4, 2022
    7
    @aijam
    @huntagain2008
    感谢感谢,两位写的都很好哈,我也发现了这个问题,/how(.+)you/只给头尾匹配的 how you 前加上了引号,还不太清楚怎么处理哈
    huntagain2008
    huntagain2008
    Nov 4, 2022
    8
    #2 how->how‘ you->‘you 这种还清楚点,小白我就是这样想的。

    awk 有内置的 gsub 函数可以全局替换匹配项

    # howxxxyou.awk
    #
    {
    value = $0
    gsub(/how/, "&'", value)
    gsub(/you/, "'&", value)
    print value
    }
    aloxaf
    aloxaf
    Nov 5, 2022
    9
    @maosu #7 sed 不支持非贪婪,用 perl 吧

    ❯ echo howareyouhowareyou | perl -pe "s/how(.+?)you/how'\1'you/g"
    how'are'youhow'are'you
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2509 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 11:25 · PVG 19:25 · LAX 03:25 · JFK 06:25
    ♥ Do have faith in what you're doing.