精華區beta RegExp 關於我們 聯絡資訊
※ [本文轉錄自 Linux 看板] 作者: dilutetarget (☑蒙提派森) 看板: Linux 標題: [問題] sed 範例問題 時間: Tue Mar 9 00:24:23 2010 各位大大你們好啊 關於底下這個 sed 的範例 我想了好久 看著解決的方法 卻是一點頭緒都沒有 可否請各位先知 可以給我一點提示或是稍微說明一下 謝謝大家! [問題]: 將全部字母大寫的字改成僅是第一個字母大寫: (範例) input: SMITH, A.J. and OTHER, A.N. and SCROOGE, E. output: Smith, A.J. and Other, A.N. and Scrooge, E. [方法]: s/\$/AaBbCcDdEdFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz/ : again s/\([A-Za-z]\)\([A-Z]\)\(.*\2\(.\)\)/\1\4\3/ t again s/AaBb.*// -- 以上,麻煩大家了,感恩~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.31.160.134 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.31.160.134 > -------------------------------------------------------------------------- < 作者: LPH66 ((short)(-15074)) 看板: RegExp 標題: Re: [問題] sed 範例問題 時間: Tue Mar 9 08:50:26 2010 ※ 引述《dilutetarget (☑蒙提派森)》之銘言: : ※ [本文轉錄自 Linux 看板] : 作者: dilutetarget (☑蒙提派森) 看板: Linux : 標題: [問題] sed 範例問題 : 時間: Tue Mar 9 00:24:23 2010 : 各位大大你們好啊 : 關於底下這個 sed 的範例 : 我想了好久 看著解決的方法 卻是一點頭緒都沒有 : 可否請各位先知 可以給我一點提示或是稍微說明一下 : 謝謝大家! : [問題]: 將全部字母大寫的字改成僅是第一個字母大寫: : (範例) input: SMITH, A.J. and OTHER, A.N. and SCROOGE, E. : output: Smith, A.J. and Other, A.N. and Scrooge, E. : [方法]: s/\$/AaBbCcDdEdFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz/ 首先它在原字串的尾巴附上 AaBb...Zz 這一串 : : again : s/\([A-Za-z]\)\([A-Z]\)\(.*\2\(.\)\)/\1\4\3/ 先塗個色好講解: \1 \2 \3 \4 這個是對前有字母的大寫字母 \([A-Z]\) 做以下的事: * 找到AaBb..Zz那一串當中和它相同的字母 (\(.*\2\(.\)\)裡的 \2 做這件事) 因為 \2 前面是 .* 它會 greedily 的抓取字母 所以 \2 一定對到最後面的對應字母 * 找出對應小寫字母 這由跟在 \2 後面的 \(.\) 負責 它會在 \4 * 替換成 \1\4\3 也就是把 \2 換成 \4 於是就把大寫字換成小寫了 至於 AaBb..Zz 這一串不會被換到 原因是這時變不出 \2 來 所以 \3 對不到 : t again : s/AaBb.*// 最後把 AaBb..Zz 消掉 之所以這樣不會消掉別的東西是因為原來的單字要有大寫就一定是字首大寫 所以不會出現中間大寫的字 因此 AaBb.* 就一定是定位到我們加上去的字串了 -- ˊ_▂▃▄▂_ˋ. ◣          ▅▅ ▅▅ ι●╮   ./◤_▂▃▄▂_◥ \'▊   HARUHI █████ <■┘   ◤◤◥█◥◥█Δ   ISM    By-gamejye ¢|\   ▌▌ζ(▏●‵◥′●)Ψ ▏           █    ⊿Δ    /|▋ |\ ▎         ハルヒ主義      ▄█ ◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界をいに盛り上げるための宮ハルヒの    -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92
dilutetarget:謝謝您 經由您的解釋 我已經懂了大致的概念 03/09 13:56
dilutetarget:不過依照方法實做 一直沒做出來 我再try看看 感謝您~ 03/09 13:57