简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找,删除,替换某个特定的字符串。
正则表达式是由普通字符与元字符组成文字模式。其中普通字符包括大小写字母,数字,标点符号及一些其他符号。
正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。基础正则表达式是常用正则表达式最基础的部分。在Linux系统中常见的文件处理工具中grep 与sed 支持基础正则表达式,而egrep 与awk 支持扩展正则表达式。
grep
egrep
sed
awk
:转义字符, (让具有特殊意义的元字符作为普通字符去使用)
例如:!(!),\n(换行)等
^:匹配字符串开始的位置 (以…开始)
例如:a,the,^#
: 匹 配 字 符 串 结 束 的 位 置 ( 以 . . . . 结 束 ) 例 如 : w o r d :匹配字符串结束的位置 (以....结束) 例如:word :匹配字符串结束的位置(以....结束)例如:word
.:匹配除\n之外的任意的一个字符
例如:go.d,go…d (以g开头,d结尾,中间包括两个字符内容)
:匹配前面子表达式0次或者多次
例如:good(god,good,goood…),go.*d(god,goad,gord…)
例如:go[ola]d,[abc],[a-z],[a-z0-9]
{n,m}:匹配前面的子表达式n到m次,有{n},{n,},{n,m}三种格式
例如:go{2}d(o出现2次),go{2,3}d(o出现至少2次,最多3次),go{2,}d(o出现2次或者2次以上)
-n:表示显示行号
-i:表示不区分大小写
-v:表示反向过滤
[ ]: 查找集合字符
过滤包含the的内容
[root@server2 ~]# grep -n ‘the’ test.txt
过滤不包含the的内容
[root@server2 ~]# grep -vn ‘the’ test.txt
过滤以sh开头,以rt结尾,中间匹配i或o
[root@server2 ~]# grep -n ‘sh[oi]rt’ test.txt
过滤o出现2次和出现2次以上的
[root@server2 ~]# grep -n ‘o{2}’ test.txt
[root@server2 ~]# grep -n ‘o{2,}’ test.txt
过滤oo前面不是w的内容和以不是w为开头的接着oo的内容
[root@server2 ~]# grep -n '[^w]oo' test.txt
[root@server2 ~]# grep -n '^[^w]oo' test.txt
^ :匹配输入字符串的开始位置。除非在方括号表达式中使用,代表不包含该字符集合。要匹配“^”字符本身,请使用“\”
$ :匹配输入字符串的结尾位置。如果设置了RegExp(正则表达式)对象的Multiline(多个)属性,则“$”也匹配‘\n’或‘\r’(换行)。
要匹配"$"字符本身,请使用“\$”
.:匹配除了“\n\r”之外的任何单个的字符
\:反斜杠,又叫转义字符,去除其紧跟的元字符或通配符的特殊意义。
*:匹配前面的子表达式零次或多次。要匹配“*”字符,请使用“\*”
[]:字符集合。匹配所包含的任意一个字符。例如,“[abc” 可以匹配“plain” 中的“a”
[^ ]:赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]”可以匹配“plain”中任何一个字母
[n1-n2]: 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]” 可以匹配“a”到“z”范围内的任意一个小写字母字符。
{n}: n是一个非负整数,匹配确定的n次。例如,“o{2}"不能匹配“Bob” 中的“o”,但是能匹配“food”中的“oo”
{n,}: n是一个非负整数,至少匹配n次。例如,“o{2,}”不能匹配“Bob” 中的“o”,但能匹配“fooood”中的所有o。
“o{1,}”等价于“o+”(至少出现1次)。“o{0,}”则等价于“o*"(至少出现0次)
{n,m}: m和n均为非负整数,其中n<=m, 最少匹配n次且最多匹配m次
grep一般多用于查找,检索内容,参数
默认情况下。所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数
a: 增加,在当前行下面增加一行指定内容
c:替换,将选定行替换为指定内容
d:删除,删除选定的行
i:插入,在选定行上面插入一行指定内容
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。(输出)
s:替换,替换指定字符
y:字符转换
[root@server2 ~]# nl test.txt | sed -n '4p'
[root@server2 ~]# nl test.txt | sed -n '3,5p
[root@server2 ~]# nl test.txt | sed -n 'n;p'
[root@server2 ~]# nl test.txt | sed -n 'p;n'
[root@server2 ~]# nl test.txt | sed -n '1,6{n;p}'
[root@server2 ~]# nl test.txt | sed -n '3,9{p;n}'
H:复制到剪切板
g,G :将剪切板中的数据覆盖/追加至指定行
w:保存为文件
r:读取指定文件
a:追加指定内容
\n 换行符,是另起一新行(光标换行)
\r 回车符,光标回到一旧行的开头(覆盖前一个)