但自己偏偏就是屬於前者─不較不用心的那一種人,所以就乾脆把學過的指令和用法記錄下來....
a) 一個'.'就是代表一個字元;若要代表'.',則是在前面多加一個跳脫字元'\',變成'\.'
b) ^Picasso:代表Picasso出現在行首;
c) Picasso$:代表Picasso出現在行尾。
d)
[A-Z]:一個大寫字母;
[a-z]:一個小寫字母;
[0-9]:一個數字;
[^A-Z]:一個非大寫字母;
[^a-zA-Z]:一個非字母;
[^a-z0-9A-Z]:一個非數字、字母。
e) aA*C:在'a'和'C'之間,字元'A'出現0或0個以上。
f) [a-z]\{3,5\}:以3~5個小寫字母所組成的字串。
會跟RE搭配的指令之一就是"sed"指令。sed指令工具的特色,就是可以在不修改原始檔案的狀況下,執行動態編輯。基本格式:sed "樣式命令" "檔案"
[root@localhost ~] sed "2,25d" /etc/passwd把第2~25行刪除,其餘顯示。
[root@localhost ~] sed "/root/d" /etc/passwd搜尋含有"root"的字串,並把它刪除 (Delete)。
[root@localhost ~] sed "/[0-9]\{3\}/d" /etc/passwd把含有3位數的字串刪除。
[root@localhost ~] sed "/^$/d" /etc/passwd把空白列刪除。
[root@localhost ~] sed '/root/!d' /etc/passwd搜尋含有"root"的字串,不要刪除。等同於:把不含有"root"的字串刪除。
[root@localhost ~] sed -n "/root/p" /etc/passwd [root@localhost ~] sed '/root/!d' /etc/passwd把含有"root"的字串列印 (Print)出來。
[root@localhost ~] sed -n "s/root/picasso/pg" /etc/passwd在/etc/passwd檔案中,搜尋含有"root"的字串,並全部 (Globle)取代為picasso,且列印出來。
[root@localhost ~] sed -n "s/root//pg" /etc/passwd在檔案中,搜尋含有"root"的字串,並全部取代為空字串,且列印出來。
[root@localhost ~] sed -n "s/^...//p" /etc/passwd把檔案中每一行的前3個字元刪除,並列印出來。
[root@localhost ~] sed -n "s/...$//p" /etc/passwd把檔案中每一行的末3個字元刪除,並列印出來。
[root@localhost ~] set -n "s/\(root\)/\1picasso/pg" /etc/passwd在檔案中尋找"root"字串,並儲存成檔案\1,再取代成rootpicasso,且列印出來。
[root@localhost ~] sed -n '/root/s/bin/PPG/pg' /etc/passwd [root@localhost ~] sed -n "/root/s/bin/PPG/pg" /etc/passwd在檔案中先尋找含有"root"字串的行數;在該行中再尋找含有"bin"的字串,並全部 (Globle)取代為"PPG",且列印 (Print)出來!
[root@localhost ~] sed -n "/root/,/operator/s/bin/fuck/pg" /etc/passwd在檔案中尋找有"root"字串開使出現的行數,一直到有"operator"字串的行數為止;在這之中再尋找"bin"字串,並全部取代為"fuck",且列印出來!
[root@localhost ~] sed -n "12,24s/bin/dick/pg" /etc/passwd在檔案中從12行到24行,尋找"bin"字串,並全部取代為"dick"且列印出來!
◎ 補充 (28th Jul, 2020):
前面的用法都是直接把sed指令拿來用;假如我要把某個Shell Script的執行結果,用sed來執行取代或是替換呢?
例如:我要把MAC Address: 00:14:02:03:09:60,把這中間的冒號 (:)給取消掉,那我可以這樣子來呈現:
[root@localhost ~]# [root@localhost ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:14:02:03:09:60 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8513 errors:0 dropped:13 overruns:0 frame:0 TX packets:221 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:2048 RX bytes:1021746 (997.7 KiB) TX bytes:32296 (31.5 KiB) [root@localhost ~]# [root@localhost ~]# ifconfig eth0 | grep "HWaddr" | awk '{print $5}' | sed 's/://g' 001402030960 [root@localhost ~]#
第2個例子,我要把時區 (Time Zone)裡面一些有加上底線 (UnderLine)的城市,因為正常的情況下,沒有人會寫成"New_York",所以我要把底線給取消掉,置換成空白 (Space)字元:
[root@localhost ~]# [root@localhost ~]# ls -l /usr/share/zoneinfo/America/ | grep "New_York" -rw-r--r-- 1 root root 3545 Jul 9 06:29 New_York [root@localhost ~]# [root@localhost ~]# ls -l /usr/share/zoneinfo/America/ | grep "New_York" | awk '{print $9}' | sed 's/_/\ /g' New York [root@localhost ~]#
沒有留言:
張貼留言