寫在最前
通過前面的學習,我們已經知道Linux是一個一切皆文件的系統,因此對文件的處理就顯得尤為重要,到目前為止,對于新手來說可能連鼎鼎大名的三劍客也未必聽過,不過在這之前我們也可以使用一些非常好用的文本處理工具來完成一些簡單文件的處理。本次內容就是講講如何使用幾個簡單文本處理工具的組合完成一些實用的功能。
文本處理工具
文本處理工具,用我的理解就是能夠對指定文本就行相應處理,提取輸出我們想要的結果。沿著這個思想,我們就來挖一挖這些工具,通過挖掘,下一些好用的命令就被我們給發現了,下面就給您慢慢講講他們都有哪些。
sort
功能描述:用于對文本進行排序。
語 ? ?法:sort ? [OPTION]… FILE…
選 ? ?項:
- -f: 忽略字符大小寫;
- -t: 指定分隔符,默認為tab, -t “:”表示使用:為分割符;
- -k: 指定分隔之后要進行排序比較的字段;
- -n: 使用純數字進行排序;
- -u: 排序后去重,表示相同的數據只顯示一行;
- -b:忽略最前面的空格符部分
uniq
功能描述:略去重復的行。
語 ? ?法:uniq [OPTION]… [INPUT [OUTPUT]]
選 ? ?項:
- -d:只顯示存在重復的行;
- -u:只顯示不重復的行;
- -c: 顯示文件中行重復的次數;
- -i:忽略大小寫;
wc
功能描述:統計文件的單詞數、字符數。
語 ? ?法:wc [OPTION]… [FILE]…
選 ? ?項:
- -l:列出行數;
- -w:列出字(英文單字);
- -c:列出字符數(字節數)
cut
功能描述:刪除文件每行中的特定部分。
語 ? ?法:cut OPTION… [FILE]…
選 ? ?項:
- -d: 指定分隔符;
- -f: 依據-d將信息分段,取第幾段的意思;
- -c:以字符取出固定區間;
tr
功能描述:翻譯或刪除字符。
語 ? ?法:tr [OPTION]… SET1 [SET2]
選 ? ?項:
- -d: 刪除指定內容;
示例演示
通過上面的講解,你可能還是一頭霧水,不要著急,下面的時間不是下課時間,而是練習時間,而且條條大路通羅馬,只要能達到目的,不管你用哪一種方法實現,都是OK的,好了,那就開始吧!
首先呢,需要說明的是后面的很多處理就不會是單一命令的實現,你可能需要結合前面所學的知識將多個命令組合起來使用。
(1)、列出當前系統上所有已經登錄的用戶的用戶名且同一個用戶登錄多次,則只顯示一次。
通過分析此題啊,首先要知道who命令是查看系統上的登陸用戶,并且還要取出他們的用戶名,也即是取出特定字段,這里可以使用cut命令,最后就是去重,通過上面的講解,我們知道sort有個參數就是去重的。有了解題思路,接下來就正式解題吧。
who|who|cut -d ” ” -f1|sort -u
(2)、取出最后登錄到當前系統的用戶的相關信息。
通過前面的學習,使用last命令就可以查看登錄到系統的用戶,通過查看登錄文件格式,可以發現最后登錄的反而實在第一行顯示,再使用cut命令截取出用戶名就可以查看此用戶的完整信息了。
last|head -1|cut -d ” ” -f1|id
(3)、取出當前系統上被用戶當做其默認shell的最多的那個shell。
在上一篇中我們說到用戶的完整信息保存在/etc/passwd文件中,因此此題的信息就可以在此文件中獲取,在通過上面的文件處理命令輔助就可以完成要求。
cut -d ‘:’ -f 7 /etc/passwd|sort -r|uniq -c|sort -nr|head -1
(4)、將/etc/passwd中的第三個字段值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt中。
這里明確給出了以passwd文件的第三個字段就行排序,改為大寫不就是tr命令的功能么。
sort -t ‘:’ -k3n /etc/passwd|tail -10|tr ‘a-z’ ‘A-Z’>/tmp/maxusers.txt
(5)、取出當前主機的IP地址。
此題也是通過對ifconfig命令取到的結果進行信息切分,取出其中的IP地址。
ifconfig ens33|grep “netmask”|cut -c 13-26
(6)、列出/etc目錄下所有以.conf結尾的文件的文件名,并將其名字轉換為大寫后保存至/tmp/etc.conf文件中。
此題也是先要找出要求的文件,然后進行大小寫轉換即可。
ls /etc/|grep -E ‘.conf$’ |tr ‘a-z’ ‘A-Z’ >/tmp/etc.conf
(7)、顯示/var目錄下一級子目錄或文件的總個數。
此處主要用到wc統計個數的功能。
ls /var/|wc -l
(8)、取出/etc/group文件中第三個字段數值最小的10個組的名字。
此題上題中的題4類似,大致方法可參照題4。
sort -t ‘:’ -k3n /etc/group|head -10|cut -d ‘:’ -f 1
(9)、將/etc/fsteab和/etc/issus文件的內容合并為同一個內容后保存至/tmp/etc.test文件中。
此題讀取同一目錄下的兩個文件可以使用命令行展開方式。
cat /etc/{fstab,issue} >/tmp/etc.test
今天的練習就差不多這些了,您學會了么,其他很多看似復雜的問題進行分解,最終都是由一個一個命令組合而來的,就像Linux一樣,由眾多功能單一的小程序組合完成一個復雜的大程序。因此,我們遇到問題要學會剖析分析,這樣才能在雜亂無章中抽絲剝繭,最終出色的完成任務。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90427
贊,排版比較清晰,最后部分也有自己思考的部分,很贊~~繼續加油。