測試環境為 CentOS 7 x86_64 (虛擬機)
通常處理文字時可以透過 sed 與 awk 把文件做過濾和轉換成新的輸出內容. sed – https://benjr.tw/97129 適合用於一整行的資料處理,而 awk – https://benjr.tw/97139 則比較適合將一整行做多個 欄位(Field) 的資料處理.
如果是要簡單擷取特定字串內容可以直接透過指令 #cut
參考文件 – https://blog.gtwang.org/linux/linux-cut-command-tutorial-and-examples/
[root@localhost ~]# tail -n 5 /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin ben:x:1000:1000:ben:/home/ben:/bin/bash mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
像是 /etc/passwdd 有明顯的分隔字元可利用參數 -d + -f 來擷取特定欄位的資料.
- -d, –delimiter=DELIM
use DELIM instead of TAB for field delimiter. - -f, –fields=LIST
select only these fields.
-d : -f 1 分隔字元為 : 擷取第一個欄位的資料.
[root@localhost ~]# tail -n 5 /etc/passwd | cut -d : -f 1 postfix tcpdump ben mysql apache
-d : -f 3,4 , cut -d : -f 3-4 分隔字元為 : 擷取第 3,4 個欄位的資料.
[root@localhost ~]# tail -n 5 /etc/passwd | cut -d : -f 3,4 89:89 72:72 1000:1000 27:27 48:48
[root@localhost ~]# tail -n 5 /etc/passwd | cut -d : -f 3-4 89:89 72:72 1000:1000 27:27 48:48
-d : -f 1,3-4 分隔字元為 : 擷取第 1,3-4 個欄位的資料.
[root@localhost ~]# tail -n 5 /etc/passwd | cut -d : -f 1,3-4 postfix:89:89 tcpdump:72:72 ben:1000:1000 mysql:27:27 apache:48:48
- –complement
complement the set of selected bytes, characters or fields.
可以利用 –complement 來排除不需要的欄位.
[root@localhost ~]# tail -n 5 /etc/passwd | cut -d : -f 2-5 --complement postfix:/var/spool/postfix:/sbin/nologin tcpdump:/:/sbin/nologin ben:/home/ben:/bin/bash mysql:/var/lib/mysql:/sbin/nologin apache:/usr/share/httpd:/sbin/nologin
- -c, –characters=LIST
select only these characters. - –output-delimiter=STRING
use STRING as the output delimiter the default is to use the input delimiter.
像是一些沒有固定分隔符號但位置固定的資料時候,可以用 -c 來截取所需資料.
[root@localhost ~]# ifconfig |grep -i ether ether 00:0c:29:fe:69:ed txqueuelen 1000 (Ethernet) ether 52:54:00:b8:e7:8d txqueuelen 1000 (Ethernet)
[root@localhost ~]# ifconfig |grep -i ether | cut -c 15-31 00:0c:29:fe:69:ed 52:54:00:b8:e7:8d
可以利用 –output-delimiter 指定特殊字串來把擷取的資料做區分.
[root@localhost ~]# ifconfig |grep -i ether | cut -c 15-16,18-19,21-22,24-25,27-28,30-31 000c29fe69ed 525400b8e78d
[root@localhost ~]# ifconfig |grep -i ether | cut -c 15-16,18-19,21-22,24-25,27-28,30-31 --output-delimiter="-" 00-0c-29-fe-69-ed 52-54-00-b8-e7-8d
沒有解決問題,試試搜尋本站其他內容