gpt4 book ai didi

regex - [[ :upper:]] and [:upper:] (bash)? 之间有什么区别

转载 作者:行者123 更新时间:2023-11-29 09:49:48 26 4
gpt4 key购买 nike

所以我在 macOS High Sierra 10.13.6 下使用 bash 3.2.57(1)-release,我正在尝试编写一个需要不区分大小写输入的 bash 脚本。我使用 tr "[:upper:]" "[:lower:]" <<< "$(echo AaBbCcDd)" 阅读了该内容会将整个字符串转换为小写,它确实这样做了。但是,我在其他地方读过使用 '[[:UPPER:]]''[[:LOWER:]]'反而。这些似乎仍然有效,但这让我想知道,这两者之间有什么区别吗?

最佳答案

在正则表达式中,[[:upper:]] 表示“任何大写字母”。但这是更一般机制的一个实例。外括号 […] 和内括号冒号 [:…:] 具有不同的含义。外括号包围着一个字符集。在字符集中,您可以使用方括号-冒号语法使用单个字符、2-9 等范围和字符类。例如,正则表达式 [2-9_[:upper:]] 匹配任何大写字母或下划线或 2 到 9 之间的数字。

tr 替换单个字符,而不是正则表达式。 (还有另一个替代正则表达式的工具:sed。)它的参数是一个字符集,即你要放在括号内的内容。

tr '2-9_[:upper:]' 'X'

相当于

sed 's/[2-9_[:upper:]]/X/g'

你可以这样写 tr '[[:upper:]]' '[[:lower:]]'tr '[:upper: ]' '[:lower:]'。但这并不是因为外括号有任何特殊含义。那是因为您要将 [ 替换为 [,将大写字母替换为相应的小写字母,将 ] 替换为 ] .自己替换括号没有效果。

(顺便说一下,bash 4 有一个内置的大小写转换机制:all_uppercase=${var^^}; all_lowercase=${var,,}。但这并不存在在 bash 3 中,这是 Apple 在 macOS 上提供的。要获得 bash 4,您需要第三方发行版,例如 Brew。)

关于regex - [[ :upper:]] and [:upper:] (bash)? 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57249120/

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