Linux command – cut

測試環境為 CentOS 7 x86_64 (虛擬機)

通常處理文字時可以透過 sed 與 awk 把文件做過濾和轉換成新的輸出內容. sed – http://benjr.tw/97129 適合用於一整行的資料處理,而 awk – http://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
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料