Regex 如果第一个字母为大写,则使用sed替换字符串

Regex 如果第一个字母为大写,则使用sed替换字符串,regex,sed,cygwin,Regex,Sed,Cygwin,我试着用以下文字来回答这个问题: 但结果是: wednesday $:$Weekday $:$thursday $:$Weekday $:$friday $:$Weekday $:$saturday $:$MaybeNot $:$sunday $:$MaybeNot $:$monday $:$Weekday $:$tuesday $:$Weekday 如果第一个字符是小写,为什么它会被替换?这是一个“特性”,根据区域设置中意外的字符顺序造成的,进一步解释和说明 这是一个“特征”,根

我试着用以下文字来回答这个问题:

但结果是:

wednesday
$:$Weekday

$:$thursday
$:$Weekday

$:$friday
$:$Weekday

$:$saturday
$:$MaybeNot

$:$sunday
$:$MaybeNot

$:$monday
$:$Weekday

$:$tuesday
$:$Weekday
如果第一个字符是小写,为什么它会被替换?

这是一个“特性”,根据区域设置中意外的字符顺序造成的,进一步解释和说明

这是一个“特征”,根据区域设置中意外的字符顺序引起的,进一步解释和说明


我无法重现这个问题。您确定没有添加不区分大小写的选项吗?@Barmar否,我使用的是确切的命令,但我使用的是cygwin。它在Linux和OS X上正常工作。听起来cygwin版本的sed有问题。与相同吗?我建议您使用SED,它可以使用perlre。@Barmar似乎这本身不是一个bug,请参阅下面我提供的链接。我无法重现这个问题。您确定没有添加不区分大小写的选项吗?@Barmar否,我使用的是确切的命令,但我使用的是cygwin。它在Linux和OS X上正常工作。听起来cygwin版本的sed有问题。与相同吗?我曾建议您使用SED,它可以使用perlre。@Barmar似乎这本身不是一个bug,请参阅我在下面提供的链接。@Thor:在Linux上它可以工作,问题是关于Cygwin环境的(请参阅标记)。更新了我的答案,并提供了解释此(“正确”)范围行为的链接。@Thor:在Linux上它可以工作,问题是关于Cygwin环境的(参见标签)。更新了我的答案,并提供了有关此(“正确”)范围行为的解释链接。
wednesday
$:$Weekday

$:$thursday
$:$Weekday

$:$friday
$:$Weekday

$:$saturday
$:$MaybeNot

$:$sunday
$:$MaybeNot

$:$monday
$:$Weekday

$:$tuesday
$:$Weekday
$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_ALL=

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | sed -e 's/[A-Z]/./g'
..........................a.........................

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | sed -e 's/[a-z]/./g'
.........................Z..........................

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | LC_ALL=C sed -e 's/[A-Z]/./g'
..........................abcdefghijklmnopqrstuvwxyz

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | LC_ALL=C sed -e 's/[a-z]/./g'
ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | sed -e 's/[[:upper:]]/./g'
..........................abcdefghijklmnopqrstuvwxyz

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | sed -e 's/[[:lower:]]/./g'
ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................

$ sed --version
GNU sed version 4.2.1