Sed 沒有給我預期的結果。我想從第 2 組獲得輸出,但 sed 什么也沒給我。我運行了這個命令Ubuntu 20.04.3 LTS,我正在使用sed (GNU sed) 4.7. 但是當我在 regex101.com 上嘗試時,它給了我預期的結果。你可以在這里看到它。
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: <[email protected]>.
第 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:~#
uj5u.com熱心網友回復:
使用您的 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
請參閱在線演示。
在括號運算式內,\w被決議為反斜杠或w匹配模式。[:alnum:]POSIX 字符類匹配數字或字母,因此,\w也匹配下劃線,您需要在方括號運算式中組合[:alnum:]和_,而不是匹配-char: [[:alnum:]_-]。注意-必須位于括號運算式的開始/結束處。
我用作~正則運算式分隔符字符,因為您/在正則運算式模式中有字符,這有助于避免過度轉義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/377240.html
上一篇:docker的Xdebug未連接
