Linux-文本工具
抽取文本的工具
文件內容:less和 cat
文件截取:head和tail
按列抽取:cut
按關鍵字抽取:grep
文件查看
文件查看命令:
cat,tac,rev
cat [OPTION]... [FILE]...
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
tac 行號反轉
rev 同行反轉
分頁查看文件內容
more: 分頁查看文件
more [OPTIONS...] FILE...
-d: 顯示翻頁及退出提示
less:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/文本 搜索 文本
n/N 跳到下一個 或 上一個匹配
less 命令是
顯示文本前或後行內容
head [OPTION]... [FILE]...
-c #: 指定獲取前#字節
-n #: 指定獲取前#行
-#: 指定行數
tail [OPTION]... [FILE]...
-c #: 指定獲取後#字節
-n #: 指定獲取後#行
-#:
-f: 跟蹤顯示文件fd新追加的內容,常用日誌監控
相當於 --follow=descriptor
-F: 跟蹤文件名,相當於—follow=name --retry
tailf 類似tail –f,當文件不增長時並不訪問文件
生成12位字母數字組合的字符串
[root@centos7 data]#openssl rand -base64 30 | tr -dc '[:alnum:]' | head -c 12
iskr3rzbvX2Z
查看ifconfig ens33的第2行
ifconfig ens33 | head -n2 | tail n1
按列抽取文本cut和合並文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定輸出分隔符
[root@centos7 data]#cut -d: -f 1,3,5-7 /etc/passwd
root:0:root:/root:/bin/bash
bin:1:bin:/bin:/sbin/nologin
daemon:2:daemon:/sbin:/sbin/nologin
adm:3:adm:/var/adm:/sbin/nologin
[root@centos7 data]#who | cut -c1-9
root
[root@centos6 ~]#chkconfig iptables off
[root@centos6 ~]#service iptables stop
[root@centos7 data]#systemctl stop firewalld
[root@centos7 data]#systemctl disable firewalld
rpm -ivh /mnt/Packages/httpd-2….rpm
service httpd start
vim /var/www/html/aaa.html
tail -f /var/log/httpd/access_log
第一列就是訪問本機web的ip地址
cut和paste
顯示文件或STDIN數據的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合並兩個文件同行號的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
分析文本的工具
文本數據統計:wc
整理文本:sort
比較文件:diff和patch
收集文本統計數據wc
計數單詞總數、行總數、字節總數和字符總數
可以對文件或STDIN中的數據運行
wc story.txt
39 237 1901 story.txt
行數 字數 字節數
常用選項
-l 只計數行數
-w 只計數單詞總數 -連著寫的就算一個單詞
-c 只計數字節總數
-m 只計數字符總數
-L 顯示文件中最長行的長度
ls | wc -l
文本排序sort
把整理過的文本顯示在STDOUT,不改變原始文件
sort [options] file(s)
常用選項
-r 執行反方向(由上至下)整理
-R 隨機排序
-n 執行按數字大小整理
-f 選項忽略(fold)字符串中的字符大小寫
-u 選項(獨特,unique)刪除輸出中的重復行
-t c 選項使用c做為字段界定符
-k X 選項按照使用c字符分隔的X列來整理能夠使用多次
linux:#netstat -nt
win:>tasklist
netstat -no | find pid
統計有多少個IP訪問
[root@centos6 html]#cut -d " " -f1 /var/log/httpd/access_log | sort -u | wc -l
抽獎
[root@centos6 html]#seq 102 | sort -R | head -n1
22
取出passwd裏的用戶名和UID,並按UID做倒序排序
[root@centos6 html]#cat /etc/passwd | cut -d: -f1,3 | sort -t: -k2 -nr
uniq
uniq命令:從輸入中刪除前後相接的重復的行
uniq [OPTION]... [FILE]...
-c: 顯示每行重復出現的次數
-d: 僅顯示重復過的行
-u: 僅顯示不曾重復的行
註:連續且完全相同方為重復
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
統計訪問量前10的ip,並統計每個ip訪問了多少次
[root@centos6 data]#cat /var/log/httpd/access_log |cut -d " " -f1 | sort | uniq -c |sort -nr | head
比較文件
比較兩個文件之間的區別
diff foo.conf foo2.conf
5c5
< use_widgets = no
---
> use_widgets = yes
?註明第5行有區別(改變)
復制對文件改變patch
diff 命令的輸出被保存在一種叫做“補丁”的文件中
使用 -u 選項來輸出“統一的(unified)”diff格式文件,最適用於補丁文件
patch 復制在其它文件中進行的改變(要謹慎使用)
適用 -b 選項來自動備份改變了的文件
$ diff -u foo.conf foo2.conf > foo.patch
$ patch -b foo.conf foo.patch
練習:
1、統計遠程主機登錄次數的前三個IP
[root@centos7 data]#last | tr -s ' ' | cut -d ' ' -f3 | grep [*.*.*.*] | sort | uniq -c | sort -nr | head -n3
2、找出ifconfig “網卡名” 命令結果中本機的IPv4地址
centos6上取ifconfig eth0的IP
[root@centos6 ~]#ifconfig eth0 | head -n2 | tail -n1 | tr -s " " : | cut -d: -f4
192.168.30.128
centos7上取ifconfig ens33的IP
[root@centos7 data]#ifconfig ens33 | head -n2 | tail -n1 | tr -s " " : | cut -d: -f3
192.168.30.129
3、查出分區空間使用率的最大百分比值
[root@centos7 data]#df | tr -s ' ' : | cut -d: -f5 | grep [0-9] | sort -rn | head -n1
4、查出用戶UID最大值的用戶名、UID及shell類型
[root@centos7 data]#cat /etc/passwd | cut -d: -f1,3,7 | sort -t: -k2 -n | tail -n1
5、查出/tmp的權限,以數字方式顯示
[root@centos7 data]#stat /tmp | grep '(' | cut -c 10-13
1777
6、統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序
[root@centos7 data]#netstat -nt | grep [0-9] | tr -s ' ' : | cut -d: -f6 | sort | uniq -c | sort -nr
Linux文本處理三劍客
grep:文本過濾(模式:pattern)工具
grep, egrep, fgrep(不支持正則表達式搜索)
sed:stream editor,文本編輯工具
awk:Linux上的實現gawk,文本報告生成器
grep
grep: Global search REgular expression and Print out the line
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行
模式:由正則表達式字符及文本字符所編寫的過濾條件
grep [OPTIONS] PATTERN [FILE...]
grep root /etc/passwd
grep "$USER" /etc/passwd
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd
grep命令選項
--color=auto: 對匹配到的文本著色顯示
-v: 顯示不被pattern匹配到的行
-i: 忽略字符大小寫
-n:顯示匹配的行號
-c: 統計匹配的行數
-o: 僅顯示匹配到的字符串
-q: 靜默模式,不輸出任何信息 但有輸出的話$?=0,無輸出的話$?=1(非0)
-A #: after, 後#行
-B #: before, 前#行
-C #:context, 前後各#行
-e:實現多個選項間的邏輯or關系
grep -e ‘cat ’ -e ‘dog’ file
-w:匹配整個單詞 字母、數字、下劃線不能分隔單詞,其它都可以
-E:使用ERE
-F:相當於fgrep,不支持正則表達式
-f:跟文件,pattern的列表 grep -f pattern.txt /etc/passwd
nmap -v -sP 172.20.180.0/24 掃描一個網段,看有哪些機器開機了
nmap -v -sP 172.20.108.0/24 | grep -B1 "Host is up" 有IP的行沒有特殊關鍵字,搜索"Host is up",加參數-B1取其上一行即可
nmap -v -sP 172.20.108.0/24 | grep -B1 "Host is up" | grep report | cut -d " " -f5 將up的IP過濾出來
Linux-文本工具