gpt4 book ai didi

正则表达式 sed 没有给我预期的结果

转载 作者:行者123 更新时间:2023-12-04 18:28:40 25 4
gpt4 key购买 nike

Sed 没有给我预期的结果。我想获得第 2 组的输出,但 sed 什么也没给我。我在 Ubuntu 20.04.3 LTS 上运行了这个命令我正在使用 sed (GNU sed) 4.7 .但是当我在 regex101.com 上尝试时,它给了我预期的结果。可以看here .

root@6ab6c9bc0d76:~# cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
root@6ab6c9bc0d76:~# sed --version
sed (GNU sed) 4.7
Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
Paolo Bonzini, Jim Meyering, and Assaf Gordon.
GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.
第 2 组为空。
root@6ab6c9bc0d76:~# echo "https://one-two-three-four-five.dev.domain.com" | sed -E "s/(https?:\/\/)([\w|-]*)(.*)/Group1: \1\nGroup2: \2\nGroup3: \3/"
Group1: https://
Group2:
Group3: one-two-three-four-five.dev.domain.com
root@6ab6c9bc0d76:~#

最佳答案

使用你的 GNU sed , 您可以使用

#!/bin/bash
echo "https://one-two-three-four-five.dev.domain.com" | \
sed -E "s~(https?://)([[:alnum:]_-]*)(.*)~Group1: \1\nGroup2: \2\nGroup3: \3~"
输出:
Group1: https://
Group2: one-two-three-four-five
Group3: .dev.domain.com
online demo .
在括号表达式中, \w被解析为反斜杠或 w匹配模式。 [:alnum:] POSIX 字符类匹配数字或字母,因此,如 \w也匹配下划线,你需要结合 [:alnum:]_括号内的表达式也匹配 -字符: [[:alnum:]_-] .注意 -必须位于括号表达式的开始/结束处。
我用了 ~作为正则表达式分隔符 char 就像你有 /正则表达式模式中的字符,这有助于避免过度转义。

关于正则表达式 sed 没有给我预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70262755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com