正则表达式 笔记

重新复习的笔记

timg

文本处理工具

文本处理工具三剑客 之一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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code