Re: [問題] sed 範例問題
看板RegExp (正規表示式 Regular Expression)作者LPH66 ((short)(-15074))時間15年前 (2010/03/09 08:50)推噓1(1推 0噓 1→)留言2則, 1人參與討論串2/2 (看更多)
※ 引述《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
推
03/09 13:56, , 1F
03/09 13:56, 1F
→
03/09 13:57, , 2F
03/09 13:57, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章