如果第一个字母是大写的,请使用sed替换字符串

时间:2013-08-22 06:50:21

标签: regex sed cygwin

我尝试使用以下方法撰写此问题Edit a file using sed/awk的sed答案:

sed -e 's/^[A-Z]/$:$&/' file.txt

但结果是:

wednesday
$:$Weekday

$:$thursday
$:$Weekday

$:$friday
$:$Weekday

$:$saturday
$:$MaybeNot

$:$sunday
$:$MaybeNot

$:$monday
$:$Weekday

$:$tuesday
$:$Weekday

如果第一个字符是小写的话,为什么要替换它?

1 个答案:

答案 0 :(得分:1)

这是this bug report根据区域设置中意外字符排序导致的“功能”,进一步解释为herehere

$ 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