Linux 正则表达式之grep+egrep+nl+sed命令

grep 基本正则表达式 BRE

参数 	说明
-b 	将二进制文件作为文本来进行匹配
-c 	统计以模式匹配的数目
-i 	忽略大小写
-n 	显示匹配文本所在行的行号
-v 	反选,输出不匹配行的内容
-r 	递归匹配查找
-A n 	n 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行
-B n 	n 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行
--color=auto 	将输出中的匹配项设置为自动颜色显示

任意数量

# 将匹配以'z'开头以'o'结尾的所有字符串
echo 'zero\nzo\nzoo' | grep 'z.*o'

# 将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
echo 'zero\nzo\nzoo' | grep 'z.o'

# 将匹配以'z'开头,以任意多个'o'结尾的字符串
echo 'zero\nzo\nzoo' | grep 'zo*'

特定字符

# grep默认是区分大小写的,这里将匹配所有的小写字母
echo '1234\nabcd' | grep '[a-z]'
# 将匹配所有的数字
echo '1234\nabcd' | grep '[0-9]'
# 将匹配所有的数字
echo '1234\nabcd' | grep '[[:digit:]]'
# 将匹配所有的小写字母
echo '1234\nabcd' | grep '[[:lower:]]'
# 将匹配所有的大写字母
echo '1234\nabcd' | grep '[[:upper:]]'
# 将匹配所有的字母和数字,包括0-9,a-z,A-Z
echo '1234\nabcd' | grep '[[:alnum:]]'
# 将匹配所有的字母
echo '1234\nabcd' | grep '[[:alpha:]]'
# 标点符号
echo '12!34\nabc.?d' | grep '[[:punct:]]'

特殊符号说明:

[:alnum:] 	代表英文大小写字母及数字,亦即 0-9, A-Z, a-z
[:alpha:] 	代表任何英文大小写字母,亦即 A-Z, a-z
[:blank:] 	代表空白键与 [Tab] 按键两者
[:cntrl:] 	代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 	代表数字而已,亦即 0-9
[:graph:] 	除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 	代表小写字母,亦即 a-z
[:print:] 	代表任何可以被列印出来的字符
[:punct:] 	代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 	代表大写字母,亦即 A-Z
[:space:] 	任何会产生空白的字符,包括空白键, [Tab], CR 等等
[:xdigit:] 	代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

排除字符^

echo 'geek\ngood' | grep '[^o]'

当^放到中括号内为排除字符,否则表示行首。

echo 'geek\ngood' | grep '^g'

egrep 扩展正则表达式 ERE

要通过grep使用扩展正则表达式需要加上-E参数,或使用egrep

egrep [范本模式] [文件或目录]

# 只匹配"zo"
echo 'zero\nzo\nzoo' | grep -E 'zo{1}'
# 匹配以"zo"开头的所有单词
echo 'zero\nzo\nzoo' | grep -E 'zo{1,}

# 匹配"www.aaa.com"和"www.google.com"
echo 'www.aaa.com\nwww.baidu.com\nwww.google.com' | grep -E 'www\.(aaa|google)\.com'
# 或者匹配不包含"baidu"的内容
echo 'www.aaa.com\nwww.baidu.com\nwww.google.com' | grep -Ev 'www\.baidu\.com'

nl

nl命令在linux系统中用来计算文件中行号,可以将输出的文件内容自动的加上行号

sed 流编辑器

sed工具在 man 手册里面的全名为"sed - stream editor for filtering and transforming text ",意即,用于过滤和转换文本的非交互式流编辑器。

sed [参数]... [执行命令] [输入文件]...

参数 	说明
-n 	安静模式,只打印受影响的行,默认打印输入数据的全部内容
-e 	用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
-f filename 	指定执行 filename 文件中的命令
-r 	使用扩展正则表达式,默认为标准正则表达式
-i 	将直接修改输入文件内容,而不是打印到标准输出设备

增删

# 删除第二行
nl /etc/passwd | sed '2d'

# 删除第三到最后一行
nl /etc/passwd | sed '3,$d'

# 在第二行后(亦即是加在第三行)加上『abc』
nl /etc/passwd | sed '2a abc'

# 加在第三行前
nl /etc/passwd | sed '3i abc'

# 增加多行
nl /etc/passwd | sed '2a abc\
def'

替换

# 将2-5行的内容替换为abc
nl /etc/passwd | sed '2,5c abc'

过滤打印

# 将5-7行内容打印
nl /etc/passwd | sed -n '5,7p'

数据的搜索

# 搜索有root关键字的行
nl /etc/passwd | sed '/root/p'
posted @ 2020-06-20 10:38  林震宇  阅读(234)  评论(0编辑  收藏  举报