gpt4 book ai didi

regex - 连字符和下划线在 sed 中不兼容

转载 作者:行者123 更新时间:2023-12-02 09:20:49 24 4
gpt4 key购买 nike

我很难让 sed 识别其模式字符串中的连字符和下划线。

有谁知道为什么

[a-z|A-Z|0-9|\-|_]

在以下示例中的工作方式如下
[a-z|A-Z|0-9|_]

?
$  cat /tmp/sed_undescore_hypen
lkjdaslf lkjlsadjfl dfpasdiuy service-type = service-1; jaldkfjlasdjflk address = address1; kldjfladsf
lkjdaslf lkjlsadjfl dfasdf service-type = service_1; jaldkfjlasdjflk address = address1; kldjfladsf

$ sed 's/.*\(service-type = [a-z|A-Z|0-9|\-|_]*\);.*\(address = .*\);.*/\1 \2/g' /tmp/sed_undescore_hypen
lkjdaslf lkjlsadjfl dfpasdiuy service-type = service-1; jaldkfjlasdjflk address = address1; kldjfladsf
service-type = service_1 address = address1

$ sed 's/.*\(service-type = [a-z|A-Z|0-9|\-]*\);.*\(address = .*\);.*/\1 \2/g' /tmp/sed_undescore_hypen
service-type = service-1 address = address1
lkjdaslf lkjlsadjfl dfasdf service-type = service_1; jaldkfjlasdjflk address = address1; kldjfladsf

$ sed 's/.*\(service-type = [a-z|A-Z|0-9|_]*\);.*\(address = .*\);.*/\1 \2/g' /tmp/sed_undescore_hypen
lkjdaslf lkjlsadjfl dfpasdiuy service-type = service-1; jaldkfjlasdjflk address = address1; kldjfladsf
service-type = service_1 address = address1

最佳答案

如前所述,您不需要任何东西来分隔括号表达式中的范围。所要做的就是添加 |到表达式匹配的字符。
然后,要添加连字符,您可以将其作为表达式中的第一个或最后一个字符:

[a-zA-Z0-9_-]
最后,范围如 a-z不一定意味着 abcd...xyz ,取决于您的语言环境。您可以改用 POSIX 字符类:
[[:alnum:]_-]
哪里 [:alnum:]对应于您的语言环境的所有字母数字字符。在 C locale,对应于 0-9A-Za-z .

关于regex - 连字符和下划线在 sed 中不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743964/

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