正则表达式概念
grep命令详解
详解linux正则表达式(基础正则表达式+扩展正则表达式)
是一种通过符号和字符串进行匹配规则的,对文件内容的查询结果进行影响。
正则表达式是由普通字符和元字符构成。
1.其中普通字符包括大小写字母,数字,标点符号及一些其它符号。
2.而元字符则是指那些在正则表达式中有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
常用正则:grep、sed、awk、pgrep、mkdir、touch……
touch a{1…100}.txt
[root@localhost ~]# ifconfig ens33 | grep "inet 192.168.6.20 " | awk ‘{print $5}’
broadcast
(1)n:显示行号,查询的指定字符串在文件中所在的行号
(2)i:显示内容不区分大小写
(3)v:反向查询,显示不包含指定字符串的行
(3)[ ] :匹配[ ]中任意字符,or的意思
(4)^ :以指定的字符或字符串开头
(5)$ :放在字符串前面,表示调用变量,字符串为变量名。放在字符串后面,表示以该字符串结尾。
特殊用法: $ abc {$ 表示调用变量}
注意:如果结尾为.则需要加转义符。因为.在 正则表达式中也是一个元字符,所以需要用转义符将具有特殊意义的字符转化成普通字符。
(6)^$ :显示空行
(7)
[起始数字-结束数字] : 在指定的数字范围之间 [1-10]
[起始字母-结束字母] : 在指定的字母范围之间 [a-u]
grep -n “[A-Z]” /usr/local/httpd/conf/httpd.conf
[A-Z] :连续范围的数字或字母
数字举例:
(1)取反值
格式一、
格式二、
(2){ } :指定之前的字符重复出现的数量,{ } 需要加转义符 还有:. * ( ) $ /
指定字符{数字1,数字2} : 表示字符串中,指定字符连续出现的数量范围 “wo{2,5}rk”
指定字符{数字1} : 表示字符串中,指定字符连续出现的数量范围 “wo{2}rk”
例:
(3)正则中的通配符:
grep ‘r…o’ /etc/passwd
查询r和o中间有2个字符的,空格算一个字符
grep -n ‘ooo*’ /etc/passwd.old
查询两个o以上的字符串
在查询“oo o*”中,必须以oo成对出现的,而在查询“ooo o*”,必须以ooo成对出现
如果是“o o*”,则第一个o必须存在,第二个o是零个或者多个,所以包含o、oo、ooo、oooo、……
若查询“oo o*”,查询两个o以上的字符串。搜索关键字是两a。包含oo、ooo、oooo、……
若查询“ooo o*”,查询三个o以上的字符串。包含ooo、oooo、……
grep -n ‘.*’ /etc/passwd.old
所有都出现
在shell中,增加了一些更简化的正则表达式元字符,只有一小部分命令支持扩展正则表达式。
使用命令:
grep命令仅支持基础正则表达式。如果使用扩展正则表达式,需要使用egrep或awk命令!
1)egrep -n ‘woo+d’ test.txt #“wo{2,}rk"可以写成"wo+rk”
2)egrep -n ‘o?oo’ test.txt #代表查询指定文件中包含oo,且第一个o可要可不要的字符串
3)egrep -n ‘o?’ test.txt
4)egrep -n ‘oo?’ test.txt
5)egrep -n ‘ooo?’ test.txt
6)egrep -n ‘name|Name’ /usr/local/httpd/conf/httpd.conf
7)egrep -n ‘t(a|e)st’ /usr/local/httpd/conf/httpd.conf (只能对某一字符进行限制)
8)egrep -n ‘A(xyz)+C’ /usr/local/httpd/conf/httpd.conf
以上后三个必须加引号,而之前的可加可不加!!!
shell编程三剑客: GREP SED AWK
sed命令教学
awk命令教学
【1】sed是一种在线编辑器,它一次处理一行内容。
Sed主要作用:
用来自动编辑一个或多个文件;
简化对文件的反复操作;
编写转换程序等。
【默认情况下,所有的sed命令都是在模式空间内执行的(也就是不修改源文件)!因此输入的文件并不会发生任何变化,除非是用重定向存储输出 】
用法:
两种格式
sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数
[选项]
常见的sed命令选项主要包含以下几种:
-n、–quiet或silent:仅显示处理后的结果
-i:编辑文本内容
-e或-expression=:用指定命令或者脚本来处理输入的文本文件
-f或-file=:用指定的脚本文件来处理输入的文本文件
-h或–help:显示帮助
‘操作’
“操作”用于指定对文件操作的动作行为,也就是sed命令。通常情况下是采用“[n1[,n2]]”操作参数的格式。n1、n2是可选的,不一定会存在,代表选择进行操作的参数。
如:操作需要在5~20行之间进行,则表示为“5,20动作行为”。
常见的操作包括以下几种:
a: 增加,在当前行下面增加一行指定内容。
c: 替换,将选定行替换为指定内容
d: 删除,删除选定的行
i : 插入,在选定行上面插入一行指定内容
p: 打印, 如果同时指定行,表示打印指定行。如果不指定行,则表示打印所有内容。如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。
s : 替换,替换指定字符
y: 字符转换
参数:是指操作的目标文件。当存在多个操作对象时,文件之间用逗号“,”分隔!
而scriptfile表示脚本文件,需要用选项“-f”指定。当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
sed -i ‘1a#chkconfig:35 25 25’ /usr/local/httpd/conf/httpd.conf 注意,不能给空文件添加数据。
cp /usr/local/httpd/conf/httpd.conf /usr/local/httpd/conf/httpd.txt
head -16 /usr/local/httpd/conf/httpd.txt
删除指定范围的行:
sed -i “360,364d” /usr/local/httpd/conf/httpd.txt
sed -i “355, +10d” /usr/local/httpd/conf/httpd.txt
vim a.txt
server
SERVER
Server
aaabaaaa
dddkdda
sed -i ‘s/server/SERVER1/’ a.txt
将每行的第一个字符串进行修改
sed -i ‘s/server/SERVER1/3’ a.txt
后面的数字3代表将每行的【第几个同名字符串】进行修改
sed -i ‘/server/c #haha’ /a.txt
替换指定字符串所在的行
只替换指定的字符串,不会替换整行。
sed -i ‘s/server/SERVER/g’ /a.txt 后面的g表示对全文进行修改
【2】awk:功能强大的编辑工具。逐行读取输入文本,并根据指定的匹配模式进行查找(一般多用于显示指定的字段)
【1】分割符,默认为空格分割符。将文件的每一行的第一个字段分割出来
awk -F: ‘{print $1}’ /etc/passwd
awk ‘{print}’ /a.txt = cat /a.txt
awk ‘{print $0}’ /a.txt = cat /a.txt awk使用$0表示整个行(记录)
【2】输出第一到第三行内容
【3】输出第一和第三行内容
【4】
awk ‘(NR%2)==0{print}’ /a.txt
输出所有偶数行内容
awk ‘(NR%2)==1{print}’ /a.txt
输出所有奇数行内容
awk ‘/^root/{print}’ /etc/passwd
输出以root开头的行
awk ‘/nologin$/{print}’ /etc/passwd
输出以nologin结尾的行
awk ‘BEGIN{X=0};//bin/bash$/{x++};END{print x}’ /etc/passwd
统计以bin/bash结尾的行数