正则表达式语法

《学习正则表达式》笔记

^从开始匹配
$匹配结束
\d匹配一个任意阿拉伯数字
\D匹配一个非数字字符,等价于[^0-9],又等价于[^\d]
. 匹配任意一个字符,不包含换行和回车
\d{3}表示出现单个数字的3次,花括号里是出现的次数
\d{3,5}表示出现单个数字最小3次,最大5次
? 出现零次或一次
+ 匹配一个或多个,包含换行和回车
* 匹配零个或多个
\w 匹配字母,数字,下划线,等价于[_a-zA-Z0-9]
\W 匹配非\w匹配的字符,等价于[^_a-zA-Z0-9],又等价于[^\w]
\s 匹配空格,等价于[ ]
\S 匹配非空格,等价于[^\s]
\t 匹配制表符,tab
\n 匹配换行符
\r 匹配回车符
\b匹配单词边界,不消耗任何字符
匹配小写字母

按键次数最少则胜

创建捕获分组(capturing group),用来匹配字符串中的一部分,使用向后引用(back reference),对捕获的分组进行引用。

$1是perl风格的后向引用

grep进行筛选

排除空行和#开头的行(grep -E 扩展正归表达式)

cat x.xx | grep -Ev "^$|#"

过滤多个条件,或的关系

ps aux | grep 'httpd\|nginx'
ps aux | grep -E "httpd|nginx"

排除以#开头的行

cat x.xx | grep -v ^#

查看file1中空行的行号

grep -n ^$ file1

需要严格匹配,如筛选abc,不需要abcd,abcde,则使用-w –word-regexp

grep -w "abc"

或者

grep "\<abc\>"

管道加grep -i不区分大小写匹配

lspci | grep -i ether
 04:00.2 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0a)

直接取出当前目录文件中含有conf的行

grep -R 'conf' .

grep 打印出前面before,后面after,周边around的几行

cat file | grep -A 1 aaa
cat file | grep -B 1 aaa
cat file | grep -C 1 aaa

高亮显示 grep 出来的字符

cat aaaa | grep --color aaaa

去掉指定的几个 pattern

grep -v -e "pattern1" -e "pattern2"
grep -Ev "pattern1|pattern2"

对过滤的结果计数(行数)

grep -c 'aaaa' filename

当前目录找到有某些字符的行及文件

grep -rn 'bbs' .

当前目录找到有某些字符的文件

grep -rl 'bbs' .

只输出匹配到的文字

不输出文件名

grep -h 'my_variable' /data/code/*

例:把所有子域名打印出来

cat domain.txt | grep -Eo '(\w+.)+jpuyy.com'

grep 所有 ip 地址

grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'