2013-12-12

Ubuntu 用 grep 指令從檔案取出字串

應該有不少人和阿舍一樣,最常用這個 grep 指令來做的事,就是被拿來找字串或是過濾內容,而最經典的做法,就是用在「ls」指令的後面來過濾要顯示的檔案清單,目的,也就是用來找檔案哩 ! 不過,grep 不只是可以把包含符合條件的整個字串給找出來,同時,還可以只顯示符合的字串哩 !

 用 grep 指令拆解字串
阿舍會用到 grep 的這項功能的原因是,阿舍有一個檔案,裡面的每一行有二欄資料,分是一組包含空白字元的英文姓和名和一組也是以空白字元做區分的金額數字( 範例如上圖),阿舍需要把前面的這一組英文姓名和後面的數字分別取出來,然後,放到不同的檔案來進行後續的處理哩 !

阿舍一開始,有想到用 sed 和 cut 指令來處理,不過,在試過之後,都沒有達到阿舍想要的結果哩 ! 後來,阿舍就有想到 grep 這個指令,但是,阿舍總覺得 grep 只是做過濾的,應該沒提供只顯示符合字串的功能吧 ! 不過,阿舍還是花時間看了一下 grep 指令的 man page,結果,就發現,原來,grep 指令是有一個「o」選項來要求 grep 只顯示符合條件的字串哩 !

阿舍試了一下,果然是可以透過這個「o」選項的幫忙,就可以用 grep 指令來達到阿舍想要的結果哩 ! 所以,以阿舍在前面提到的檔案內容及想要取出的資料為例的話,阿舍就可以分別用下面這二行的指令來取得阿舍想要的資料格式並存到不同的檔案哩 !

grep -o "^[a-zA-Z].*\s" arthurtoday_fee_out.txt  > name.txt
grep -o "[0-9].*$" arthurtoday_fee.txt > fee.txt

grep 的「o」選項的不需要任何的參數,所以,可以放在 grep 指令後的任何位置,因此,上面這二行指令也可以改成下列的方式來執行哩 !


grep  "^[a-zA-Z].*\s" arthurtoday_fee_out.txt  -o > name.txt
grep  "[0-9].*$" arthurtoday_fee.txt  -o > fee.txt

加了 o 選項的差別

這個 grep 的「o」選項在取檔案裡的字串時,是滿好用的,不過,在常用的過濾「ls」指令結果的用途上 (如上圖),阿舍就想不出來可以有什麼幫助了哩 ! ,,,, 呵 !

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁