小白基礎學習

  • 2019 年 11 月 14 日
  • 筆記

5個常用文本處理命令

1.head
2.tail
3.grep
4.sed
5.awk

1. head

語法: head -n *** file
顧名思義,中文意思就是頭部的意思, 它的用法就是按順序查看或過濾文本的
比如我用cat -n chunxiao.txt命令查看文件的內容是這樣的, -n是什麼意思呢, n就是number的縮寫, number,數字
[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

這裡面有9行內容, 如果我只想看前面的5行, 後面的不要顯示它, 這個時候就是用下面的命令
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

語法1: tail -n ** file
語法2: tail -f file
tail,尾部的意思, 就是倒數去讀取,它應該怎麼去實現呢,現在我們已經知道chunxiao.txt這個文件下面的所有的內容了, 是長這個樣子的, 是吧小白
[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

語法: grep “****” file
這個你已經認識的了,在查詢進程或者是查詢埠的時候, 不知道你是否還記得,傻孩子
它的作用很簡單, 常用的就是過濾與反過濾,下面我再用chunxiao.txt這個文件演示
現在我們很清楚chunxiao.txt下面的內容是什麼了
[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"

eg.
[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

語法1: sed ‘s/原來的/更新後/g’ file
語法2: sed -i ‘s///’ file
(就是把”原來的”替換成了”更新後”, g代表所有, 所有都替換, 如果只需要替換第一行, 那就把g去掉, 就是 sed ‘s/***/***/’)
sed, sed最大的能力在於替換, 就是把1替換成2,類似於update(更新)吧
還是以chunxiao.txt這個文件來說, 讓你加強記憶
[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

語法1:awk ‘{print$n}’  n:數字
語法2:awk -F ‘*’ ‘{print$n}’  n:數字,  -F’*’ 分隔符
awk, 按列篩選, 這個我比較常用
還是以chunxiao.txt這個文件來說哈

 

 請看, 現在裡面有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  

  

 

 

 

 

 

 
好了, 完畢, 那5個語法一定要記下來, 寫進你的記事本。