小白基礎學習
- 2019 年 11 月 14 日
- 筆記
5個常用文本處理命令
1. head
[root@centos7 chunxiao]# cat -n chunxiao.txt 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf 6 drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 root root 1551 Mar 12 2019 system.conf 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
cat -n chunxiao.txt | head -n 5
eg.
[root@centos7 chunxiao]# cat -n chunxiao.txt | head -n 5 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf
詳細說明,這裡用到了管道符 | ,管道符的作用就是交接, 就是用cat -n chunxiao.txt查看出來文件的全部內容, 然後用管道符把這個全部的內容傳輸給了後面的head去處理過濾。其實還有一條命令更加簡潔:head -n 5 chunxiao.txt
[root@centos7 chunxiao]# head -n 5 chunxiao.txt total 32 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf
看, 也是把前面5行的內容拿出來了, 只不過沒顯示行號而已, 要顯示行號呢, 可以先用cat 再用head 就像上面用管道符那樣。
2.tail
[root@centos7 chunxiao]# cat -n chunxiao.txt 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf 6 drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 root root 1551 Mar 12 2019 system.conf 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
那麼, 我想就取文件的第8和第9行(換句話說就是取倒數開始的兩行)
那麼命令就是
cat -n chunxiao.txt | tail -n 2
查詢出來的結果就是這樣的
[root@centos7 chunxiao]# cat -n chunxiao.txt | tail -n 2 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
吶, 用tail -n 2 chunxiao.txt也是可以達到同樣效果的哈
還有一個比較常用的是-f參數, 這個到時候我們再說。
下面就到文本的三劍客了
文本三劍客(grep,sed,awk)
3.grep
[root@centos7 chunxiao]# cat -n chunxiao.txt 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf 6 drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 root root 1551 Mar 12 2019 system.conf 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
如果,我只想要顯示關於”system”這個字眼的
cat -n chunxiao.txt | grep "system"
[root@centos7 chunxiao]# cat -n chunxiao.txt | grep "system" 6 drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 root root 1551 Mar 12 2019 system.conf
它就會單獨給我們列出兩行出來
如果, 我想讓他不顯示關於”system”字眼的
cat -n chunxiao.txt | grep -v "system"
eg.
[root@centos7 chunxiao]# cat -n chunxiao.txt | grep -v "system" 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
它就排除了有關”system”字眼的行
4.sed
[root@centos7 chunxiao]# cat -n chunxiao.txt 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf 6 drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 root root 1551 Mar 12 2019 system.conf 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
文件的內容已經看了很多遍了,你看第二行最後的那個名字是叫”bootchart.conf”, 現在我要把它變成zhenghua.conf
cat -n chunxiao.txt | sed 's/bootchart.conf/zhenghua.conf/g'
eg.
[root@centos7 chunxiao]# cat -n chunxiao.txt | sed 's/bootchart.conf/zhenghua.conf/g' 1 total 32 2 -rw-r--r-- 1 root root 720 Jul 31 16:15 zhenghua.conf 3 -rw-r--r-- 1 root root 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 root root 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 root root 957 Jul 31 16:15 logind.conf 6 drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 root root 1551 Mar 12 2019 system.conf 8 drwxr-xr-x. 2 root root 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 root root 1127 Jul 31 16:15 user.conf
你看, 是不是變化了
再來一個增強記憶, 你看第4和第5列, 是不是都是顯示”root”, 那麼我們把它顯示為xiaobai
cat -n chunxiao.txt | sed 's/root/xiaobai/g'
eg.
[root@centos7 chunxiao]# cat -n chunxiao.txt | sed 's/root/xiaobai/g' 1 total 32 2 -rw-r--r-- 1 xiaobai xiaobai 720 Jul 31 16:15 bootchart.conf 3 -rw-r--r-- 1 xiaobai xiaobai 615 Jul 31 16:15 coredump.conf 4 -rw-r--r-- 1 xiaobai xiaobai 983 Jul 31 16:15 journald.conf 5 -rw-r--r-- 1 xiaobai xiaobai 957 Jul 31 16:15 logind.conf 6 drwxr-xr-x. 12 xiaobai xiaobai 4096 Jul 31 16:15 system 7 -rw-r--r-- 1 xiaobai xiaobai 1551 Mar 12 2019 system.conf 8 drwxr-xr-x. 2 xiaobai xiaobai 4096 Jul 31 16:15 user 9 -rw-r--r-- 1 xiaobai xiaobai 1127 Jul 31 16:15 user.conf
已經發生了變化
5.awk

請看, 現在裡面有9列, 是吧
那麼我只想把第8列顯示出來
cat chunxiao.txt | awk '{print$8}'
eg.
[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$8}' 16:15 16:15 16:15 16:15 16:15 2019 16:15 16:15
吶, 是這個樣子的
如果我想看第9列呢
[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$9}' bootchart.conf coredump.conf journald.conf logind.conf system system.conf user user.conf
如果我只想看最後一列呢
[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$NF}' 32 bootchart.conf coredump.conf journald.conf logind.conf system system.conf user user.conf
如果我想把第8和第9列都顯示呢
[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$8,$9}' 16:15 bootchart.conf 16:15 coredump.conf 16:15 journald.conf 16:15 logind.conf 16:15 system 2019 system.conf 16:15 user 16:15 user.conf