文本處理工具
文本處理工具三劍客 之一grep
grep文本過濾工具 ,按行過濾
分為 grep egrep fgrep(不支持正則表達式)
centos 7和centos6 用的grep不一樣是因為centos用到的是別名alias grep=’grep –color=auto’
grep 可以支持變量和命令
grep -v 顯示不包含目標的行
grep -i 忽略大小寫
grep -n 匹配目標的行號
cat -n匹配目標對的行號cat -n /etc/passwd |grep root
grep -c 匹配的行數
grep -o 只顯示搜索字符串本身,不顯示其他字符
grep -q 搜索的目標不顯示,只關心包含不包含目標,不關心在什么行
&> /dev/null 不顯示搜索信息
可以用echo?查看0 是成功 其他是錯誤
grep -A 包含目標的后幾行 例 grep -A3 包含目標的后3行
grep -B 包含目標的前幾行 例 grep -B3 包含目標的前幾行
grep -C 包含目標的前后幾行 例 grep -C3 包含目標的前后各3行
nmap 網絡掃描 namp -v -sP 掃描特定的網段
centos 6 臨時掛載 cd /misc cd cd/
grep root /etc/passwd |grep bash 并且的關系 先搜索root在搜索bash
grep -e 目標 -e 目標 或的關系例: grep -e root -e wang /etc/passwd 一行只包含root 或wang 不包含在一起
grep -w 匹配單詞 例:echo x abc |grep -w abc
正則表達式 REGEXP regexp
正則表達式 寫法靈活
基本正則表達式 BRE 擴展正則表達式ERE
正則表達式引擎 采用不同算法,檢查處理正則表達式的軟件模塊 PCRE 居于perl語言的正則表達式,perl語言太靈活
正則表達式特定的字符 元字符 ,這些符號有特定的功能 。
元字符分為:字符匹配 ,匹配的次數 ,位置錨定 分組
字符匹配
. 點表示 一個字符串里的一個字符
[] 表示中括號里的任意一個字符
grep r[ab]t cat /etc/passwd 搜索rat 或rbt
匹配次數
*某一個字符出現的次數 ,包括0次
“`
* 例echo axxxb |grep x*b
“`
.* 任意長度的字符串
ls |grep .*\.txt 查找 .txt結尾的文件
\? 前面出現的字符出現一次或0次
例:echo aabccc |grep “a[b-z]\?c
\ + 前面的字符一個以上
\ { \ } 前面出現的字符出現多少次
“`
grep “go\{16\}” goohle.txt 前面的字符出現16次
grep “go\{16,\}” goohle.txt 前面的字符出現大于16次
grep “go\{,16\}” goohle.txt 前面的字符出現小于16次
“`
在中括號里的點就是點本身的意思
位置錨定
^行首錨定 grep “^root” /etc/passwd root開頭的行
$ 行尾錨定 grep “bash$” /etc/passwd bash結尾的行
grep -v “^#” |grep “^$” 表示非#號開頭的行
grep -v “^[[:space:]]*$” 只顯示非空的行
\ < 單詞詞首 cat /etc/passwd |grep “\ <root” root在詞首 rootwer
\ > 單詞詞尾cat /etc/passwd |grep “root\ >” root在詞尾 wetroot
cat /etc/passwd |grep ” \ <root\ >
也可以寫成 \b
分組
“`
echo zhouzhouzhou |grep “\(zhou\)\{3\} 希望單詞出現多少次
“`
“`
cat /etc/passwd |grep -w “^\(.*\):.*/\1$” 查看用戶和結尾相同的行
“`
(a|b) 表示a或b
“`
cat /etc/passwd |grep “^\(a\|b\).*” 查看a或b開頭的行
“`
練習題
1、顯示三個用戶root、 mage、 wang的UID和默認shell
“`
cat /etc/passwd |grep -e “^root” -e “^mage” -e “^wang” |cut -d: -f 3,7
“`
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一
個小括號的行
“`
cat /etc/rc.d/init.d/functions |egrep “^(.*_)()”
“`
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
“`
echo /etc/rc.d/init.d/functions |egrep -o “^[^/].*$”
echo /etc/rc.d/init.d/functions |egrep -o “/(.*)/(.*)/”
“`
5、統計last命令中以root登錄的每個主機IP地址登錄次數
“`
last |grep “wang” |tr -s ” ” |cut -d” ” -f 3 |egrep -o “[0-9.]{7,}” |uniq -c
“`
6、利用擴展正則表達式分別表示0-9、 10-99、 100-199、 200-249、 250-255
“`
egrep -o “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”
“`
8、將此字符串:welcome to magedu linux 中的每個字符去重并排序,重復
次數多的排到前面
“`
echo welcome to magedu linux |grep -o “.” |sort |uniq -c |sort -nr
“`
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96507