14.常用文本處理工具

1.head和tail命令


head命令:顯示文本指定前行數,默認顯示10行。
tail 命令:顯示文本指定後行數,默認顯示10行。

1.截取某一行,截取ifcongfig輸出的內容第二行
#ifconfig | head -n2 |tail -n1

2.-c選項截取字符串,下面例子是生成一個有數字字母隨機生成的10位數
#cat /dev/urandom | tr -dc ‘[:alnum:]’ |head -c10

2.tr命令


應用:轉換和刪除字符
-d:刪除
-c:取反
\n:換行
\r:回車
\t:tab鍵
[:alpha:]:任意字母
[:alnum:]:數字和字母
[:digit:]:數字
[:lower:]:小寫字母
[:upper:]:大寫字母
[:blank:]:空格
把小寫字母轉換大寫
#tr ‘a-z’ ‘A-Z’ < /etc/issue

把a–1 b–2 c–3對應轉換
#tr ‘abc’ ‘123’ < 文件名

#tr ‘abcd’ ‘123’
abcd
1233

#tr -t ‘abcd’ ‘123’
abcd
123d

-d:刪除功能
#tr -d ‘abc’ 把包含abc字母刪除
abcddsc
dds

#tr -d ‘[:alpha:]’ 把字母刪除
asdsaFGH42hsadGH
42

下例子:要執行ctrl+d,結束纔有結果,-c:是取反對意思
[root@Centos7 ~]#tr -dc ‘[:alpha:]’ 除了字母之外的都刪除,數字包括回車鍵等
asdasHG8297423jhasd
asdasHGjhasd[root@Centos7 ~]#

把換行刪掉
#tr -d ‘\n’

把tab鍵刪除
#tr -d ‘\t’

3.cut命令


應用:按列抽取,顯示指定內容

cut的選項:
-b:僅顯示行中指定直接範圍的內容;

-c:僅顯示行中指定範圍的字符;

-d:指定字段的分隔符,默認的字段分隔符爲“TAB”;

-f:顯示指定字段的內容;

-n:與“-b”選項連用,不分割多字節字符;

–complement:補足被選擇的字節、字符或字段;

–out-delimiter=<字段分隔符>:指定輸出內容是的字段分割符;

例子1:
#vim test.txt
01 chen 1
02 wang 2
03 liu 3

# cut -d” ” -f1 test.txt
這裏寫圖片描述
-d:指定分隔符爲”空格”
-f1:顯示第一個字段

# cut -d” ” -f1 –complement test.txt
這裏寫圖片描述
–complement:表示除了指定第一個字段之外的字段

例子2:
#vim test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

# cut -c1-3 test.txt
這裏寫圖片描述
-c1-3:表示打印字符第一個到第三個

#cut -c-4 test.txt
這裏寫圖片描述
-c-4:表示打印前4個字符

# cut -c4- test.tx
這裏寫圖片描述
-c4-:表示從第4個字符開始(包含第四個)到結束

4.paste命令


應用:合併兩個文件,同行號的列到一行

-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
paste -d “” f1 f2 ## 2個文件橫向合併
cat f1 f2 ## 2個文件縱向合併

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

6.wc統計行和字符的工具


//統計行數
wc -l file
//統計單詞數
wc -w file
//統計字節數(byte),也就是文件大小
wc -c file
//統計字符,字符包括空格、換行、tab鍵
wc -l file

7.sort命令


應用:排序,方便以後統計,把整理過的文本顯示在STDOUT,不改變原始文件

格式:sort [options] file(s)
常用選項:
-r 執行反方向(由上至下)整理
-R 隨機排序
-n 執行按數字大小整理
-f 選項忽略(fold)字符串中的字符大小寫
-u 選項(獨特,unique)刪除輸出中的重複行
-t c 選項使用c做爲字段界定符
-k X 選項按照使用c字符分隔的X列來整理能夠使用多次

1.對/etc/passwd文件的uid進行排序
#sort -t: -k3 -n /etc/passwd sortmorse對字符串排序的,-n是對數字排序

2.對/etc/passwd文件的用戶名排序
#sort -t: -k1 /etc/passwd

3.抽出/etc/passwwd中的用戶名和uid,按uid排序,如果需要倒序排序,用-r
#cut -d: -f1,3 /etc/passwd |sort -t: -k2 -n
#cut -d: -f1,3 /etc/passwd |sort -t: -k2 -nr

4.對文件排序,去掉重複的
#sort -u file(文件名)

5.-R 選項實現隨機排序,下例實現1到73,隨機抽一個數。
#seq 73 | sort -R |head -1

8.uniq命令


uniq命令:從輸入中刪除前後相接的重複的行
uniq [OPTION]… [FILE]…
-c: 顯示每行重複出現的次數
-d: 僅顯示重複過的行
-u: 僅顯示不曾重複的行
注:連續且完全相同方爲重複
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c

uniq命令和sort命令常常配合一起使用:
sort |uniq -c |sort -rn
先排序,然後uniq -c去掉重複,並統計重複有多少個,然後sort -n根據之前的統計數進行排序,-r進行倒序排,即由大到小排。

9.diff命令和patch命令


diff 命令的輸出被保存在一種叫做“補丁”的文件中
使用 -u 選項來輸出“統一的(unified)”diff格式文件,最適用於補丁文件
patch 複製在其它文件中進行的改變(要謹慎使用)
適用 -b 選項來自動備份改變了的文件
#diff -u f1 f2
$ diff -u foo.conf foo2.conf > foo.patch

$ patch -b foo.conf foo.patch

這裏寫圖片描述

10.練習


.1、找出ifconfig “網卡名” 命令結果中本機的IPv4地址
#ifconfig | grep inet |tr -s ” ” “:”|cut -d: -f3|head -1

.2、查出分區空間使用率的最大百分比值
#df -h | grep /dev/sd | tr -s ” ” % |cut -d% -f5|sort -rn|head -1

.3、查出用戶UID最大值的用戶名、UID及shell類型
#cat /etc/passwd |cut -d: -f1,3,7|sort -t: -k2 -rn |head -1

.4、查出/tmp的權限,以數字方式顯示
#stat /tmp|head -4|tail -1|cut -d”/” -f1|cut -d”(” -f2

.5、統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序
#netstat -nt |tr -s ” ” :|cut -d: -f6

6.獲取IP:
#ifconfig | grep inet|head -1|tr -s ” ” :|cut -d: -f3
#ifconfig| grep -w inet|grep -o “[0-9.]{1,}”|head -1
#ifconfig | grep -o “[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}” |head -1
#ifconfig | grep -o “([0-9]{1,3}.){3}[0-9]{1,3}”|head -1 簡化版
#ifconfig| grep -o “inet [0-9.]+”|cut -d” ” -f2 |head -1

7.獲取系統主版本
#cat /etc/centos-release | tr -dc ‘[:digit:].’|cut -d. -f1
#cat /etc/redhat-release | tr -dc ‘[:digit:].’|cut -d. -f1
#cat /etc/redhat-release | grep -Eo “[[:digit:]]+” |head -1

8.獲取服務器當前IP連接數
#netstat -nt

9.取2個文件的交集,即把重複的打印出來,用到uniq -d
##cat f1 f2 |sort|uniq -d
#grep -f f1 f2

10.查看access.log文件的訪問ip地址,並把前10個訪問數ip打印出來
[root@Centos7 data]#cat access_log |cut -d” ” -f1|sort |uniq -c|sort -rn|head -10
2000 192.168.32.17
1100 192.168.32.7
5 192.168.32.5

11.查看172.16.34.0/24網段 有哪些IP打開着
#nmap -v -sP 172.16.34.0/24 |grep -B1 “up”| grep “Nmap scan”|cut -d” ” -f5

12.從1-100中包含9數字的有多少個。
#seq 100|grep 9|wc -l

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章