2012-08-07 45 views
1

我有這樣的行的XML文件:正則表達式搜索和替換和casefold,但只在某些行

<key>a_acute</key> 
<string>a_acute.glif</string> 

,我需要把這個弄成這個樣子:

<key>Aacute</key> 
<string>a_acute.glif</string> 

即用字母的大寫字母替換後跟下劃線的字母(不包括下劃線),但僅限於以<key>開頭的行。這是我到目前爲止有:

sed '/^<key/s/\(.\)_/\1/' 

這將降低對<key>線下劃線。但我無法把它弄明白。我認爲把\U放在\1之前就可以做到,但事實並非如此。我究竟做錯了什麼?

回答

0
  1. 作爲一般規則:不要使用正則表達式來解析XML等非常規語言。

  2. \U是sed,默認不可用在Mac OS X您可以從homebrew安裝它作爲gnu-sedmacportsgsed一個GNU的功能。

  3. 如果你不想依賴外部工具,你可以用這樣的Perl做到這一點(與-i文件就地改變):

    的perl -i -pe的/( ?< =)(。)_/\ U $ 1 /'file.plist

相關問題