2013-08-22 128 views
1

我嘗試使用到SED答案寫這個問題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 

爲什麼更換,如果第一個字符是小寫?

+0

我無法重現該問題。你確定你沒有添加一個不區分大小寫的選項嗎? – Barmar

+0

@Barmar不,我使用確切的命令,但我使用cygwin。 – jcubic

+1

它在Linux和OS X上正常工作。聽起來像是Cygwin版本的sed問題。 – Barmar

回答

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 
+0

@Thor:在Linux上,它的問題是關於Cygwin環境(請參閱標籤)。 –

+0

更新了我的答案,並附有解釋此(「正確」)範圍行爲的鏈接。 –