1. 程式人生 > >Linux-文本工具

Linux-文本工具

Linux 文本處理 grep cut

技術分享圖片

抽取文本的工具

文件內容:less cat

文件截取:headtail

按列抽取:cut

按關鍵字抽取:grep

文件查看

文件查看命令:

cattacrev

cat [OPTION]... [FILE]...

-E: 顯示行結束符$

-n: 對顯示出的每一行進行編號

-A:顯示所有控制符

-b:非空行編號

-s:壓縮連續的空行成一行

tac 行號反轉

rev 同行反轉

分頁查看文件內容

more: 分頁查看文件

more [OPTIONS...] FILE...

-d: 顯示翻頁及退出提示

less:一頁一頁地查看文件或STDIN輸出

查看時有用的命令包括:

/文本 搜索 文本

n/N 跳到下一個 上一個匹配

less 命令是

man命令使用的分頁器

顯示文本前或後行內容

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

第一列就是訪問本機webip地址

cutpaste

顯示文件或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

比較文件:diffpatch

收集文本統計數據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

統計訪問量前10ip,並統計每個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 eth0IP

[root@centos6 ~]#ifconfig eth0 | head -n2 | tail -n1 | tr -s " " : | cut -d: -f4

192.168.30.128

centos7上取ifconfig ens33IP

[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最大值的用戶名、UIDshell類型

[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(不支持正則表達式搜索)

sedstream editor,文本編輯工具

awkLinux上的實現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 upIP過濾出來


Linux-文本工具