grep:文本搜索
grep命令介紹
grep腔寡,用來查找文件中匹配指定文本的行并打印出來
語法格式: grep [選項(xiàng)] PATTERN 文件名
命令解釋:查找指定文件中包含PATTERN的行
常用選項(xiàng)
-
-r:遞歸查找指定目錄下的所有文件(grep命令默認(rèn)支持多個(gè)文件的查找广料,但不能在目錄中查找,如果需要在目錄中進(jìn)行查找,則需要使用 -r選項(xiàng)指定)忠荞。可以使用--exclude排除某些文件多搀,使用--exclude-file排除某些目錄
grep -r hello . grep hello test01.txt test02.txt
-
-c:只打印匹配的行數(shù),不顯示內(nèi)容
grep -c Hello test01.txt
-
-i:忽略大小寫進(jìn)行匹配
grep -i hello test01.txt
-
-v:反向匹配侧甫,打印不匹配的內(nèi)容
grep -v hello test01.txt
-
-l:打印包含匹配項(xiàng)的文件名
grep -l zip dirlist*.txt
-
-L:打印不包含匹配項(xiàng)的文件名
grep -L zip dirlist*.txt
-
-n:在每個(gè)匹配行之前打印出其位于文件中的相應(yīng)行號(hào)
grep -n zip dirlist*.txt
-
-E:使用正則表達(dá)式進(jìn)行匹配
echo "BBB" | grep -E 'AAA|BBB'
sed:流編輯器
sed命令介紹
sed(stream editor珊佣,流處理器): 對(duì)文本流進(jìn)行編輯。在臨時(shí)緩沖區(qū)中創(chuàng)建副本文件披粟,只修改副本不修改源文件(可以使用-i直接修改源文件)咒锻,逐行處理文件,處理臨時(shí)緩沖區(qū)中的行守屉。
-
sed命令格式
sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]
常用動(dòng)作
-
a :新增惑艇, a 的后面可以接字串,而這些字串會(huì)在新的一行出現(xiàn)(目前的下一行)~
sed -e "1athis is a other line add by sed command" test01.txt
-
i :插入拇泛, i 的后面可以接字串滨巴,而這些字串會(huì)在新的一行出現(xiàn)(目前的上一行);
sed -e '1ithis is a other line add by sed command' test01.txt
-
d :刪除
# 打印test02.txt前四行 sed -e '5,$d' test02.txt
-
s :替換
sed -e 's/line/hello,sed./g' test01.txt sed -e '5s/line/line 5/1' -e '5s/line/hello,sed./2' test01.txt
-
-n與p配合使用(-n俺叭,關(guān)閉默認(rèn)打印恭取,p 打印匹配的行)
sed -n '5s/line/hello, sed/1p' test01.txt
-
實(shí)例:catalina.out提取某個(gè)時(shí)間段的日志,輸出到指定文件中
# sed -n '/起始時(shí)間/,/結(jié)束時(shí)間/p' 日志文件 > 輸出文件 sed -n '/2020-08-01 10:00*/,/2020-08-01 11:00*/p' catalina.out > aaa.txt
-
awk:文本分析
awk命令介紹
awk:通常用來進(jìn)行文本分析
-
awk用法
awk '{[pattern] action}' {filenames}
awk -F #-F相當(dāng)于內(nèi)置變量FS, 指定分割字符
awk -v # 設(shè)置變量
awk -f {awk腳本} {文件名}
常用動(dòng)作
示例文件 data.dat如下:
1,aaa,aaa@163.com,1995-04-05,12000
2,bbb,bbb@163.com,1996-08-15,10000
3,ccc,ccc@163.com,1998-06-07,8888
4,ddd,ddd@163.com,1994-05-04,14400
5,eee,eee@163.com,1996-03-23,7200
6,fff,fff@163.com,1995-02-21,16000
7,ggg,ggg@163.com,1997-11-12,18888
-
打印文件 print
awk '{print $0}' data.dat
-
指定分隔符熄守,打印第2列與第3列
[root@localhost cmd]# awk -F , '{print $2,$3}' data.dat aaa aaa@163.com bbb bbb@163.com ccc ccc@163.com ddd ddd@163.com eee eee@163.com fff fff@163.com ggg ggg@163.com
-
設(shè)置變量并使用(會(huì)修改源文件)
[root@localhost cmd]# awk -F ',' -va=1000 '{print $2, $5+a}' data.dat aaa 13000 bbb 11000 ccc 9888 ddd 15400 eee 8200 fff 17000 ggg 19888
-
實(shí)現(xiàn)累加
# 計(jì)算所有薪資 [root@localhost cmd]# awk -F ',' '{sum+=$5}END{print sum}' data.dat 87376 # 計(jì)算薪資大于15000的薪資總和 [root@localhost cmd]# awk -F ',' '$5>15000 {sum+=$5}END{print sum}' data.dat 34888
-
行號(hào)
# 打印薪資大于12000的員工行號(hào)蜈垮、姓名和薪資 [root@localhost cmd]# awk -F ',' '$5>12000 {print NR,$2,$5}' data.dat 4 ddd 14400 6 fff 16000 7 ggg 18888 # 統(tǒng)計(jì)薪資大于12000的員工總數(shù)量 [root@localhost cmd]# awk -F ',' '$5>12000' data.dat | wc -l 3