文本处理工具
文本处理工具三剑客 之一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.178linux.com/96507