1、正则表达式(grep)
作用:
使用单个字符串来描述
匹配一系列符合某个句法规则的字符串
组成:
普通字符与元字符
元字符:
[ ] :在中括弧的任意一个字符
[^] :除了中括弧中的任意一个字符
^ :查找行首,以什么开头
$ :查找行尾,以什么结尾
. :查找任意一个字符
* :查找重复字符
{ } :查找连续字符范围
(1)查找特定字符 -n表示显示行号,-i表示不区分大小写,-v表示反向选择
grep -n 'the' test.txt
grep -in 'the' test.txt
(2)利用中括号“[ ]”来查找集合字符
查找匹配“i” 或者“o”的字符
grep -n 'sh[io]rt' test.txt
查找“oo”前面不是“w”的字符串
grep -n '[^w]oo' test.txt
查找“oo”前面不允许存在小写字母的行
grep -n '[^a-z]oo' test.txt
查找包含数字的行
grep -n '[0-9]' test.txt
(3)查找行首“^”与行尾字符“$”
查找以小写字母开头的行
grep -n '^[a-z]' test.txt
查找不以字母开头的行
grep -n '^[^a-zA-Z]' test.txt
查找以“.”结尾的行
grep -n '\.$' test.txt
(4)查找任意一个字符“.”与重复字符“*”
“.”代表任意一个字符
grep -n 'w..d' test.txt
查询包含至少两个o以上的字符
grep -n 'ooo*' test.txt
查询以w开头d结尾,中间包含至少一个o的字符串
grep -n 'woo*d' test.txt
查询以w开头d结尾,中间的字符可有可无的字符串
grep -n 'w.*d' test.txt
查找任意数字所在的行
grep -n '[0-9][0-9]*' test.txt
(5)查找连续字符范围“{ }”
查询两个o的字符
grep -n 'o\{2\}' test.txt
查询以w开头d结尾,中间包含2-5个o的字符串
grep -n 'wo\{2,5\}d' test.txt
查询以w开头d结尾,中间包含2个以上o的字符串
grep -n 'wo\{2,\}d' test.txt
2、扩展正则表达式(egrep)
查询重复的o
egrep -n 'wo+d' test.txt
查询”tast"或者"test"字符串
egrep -n 't(a|e)st' test.txt
查询除文件中空白行与行首为“#”之外的行
egrep -v '^$|^#' test.txt
3、Sed文件处理器
-e:表示用指定命令或者脚本来处理输入的文本文件
-f:表示用指定的脚本文件来处理输入的文本文件
-n:表示仅显示处理后的结果
-i:直接编辑文本文件
a:增加,在当前行下面增加一行指定内容
c:替换,将选定行替换为指定内容
d:删除.删除选定的行
i:插入.在选定行上面插入一行指定内容
(1)输出符合条件的文本 p表示正常输出
输出所有内容
sed -n 'p' test.txt
输出第3行
sed -n '3p' test.txt
输出所有奇数行,n表示读入下一行资料
sed -n 'p;n' test.txt
输出第1-5行之间的奇数行
sed -n '1,5{p;n}' test.txt
输出第10行至文件尾之间的偶数行
sed -n '10,${n;p}' test.txt
输出包含the的行
sed -n '/the/p' test.txt
输出以PI开头的行
sed -n '/PI/p' test.txt
输出以数字结尾的行
sed -n '/[0-9]$/p' test.txt
输出包含单词wood的行
sed -n '/\<wood\>/p' test.txt
(2)删除符合条件的文本(d)
删除第3行
nl test.txt | sed '3d'
删除第3-5行
nl test.txt | sed '3,5d'
删除包含cross的行
nl test.txt | sed '/cross/d'
删除以小写字母开头的行
sed '/^[a-z]/d' test.txt
删除以“.”结尾的行
sed '/\.$/d' test.txt
删除所有的空行
sed '/^$/d' test.txt
(3)替换符合条件的文本
将每行中的第一个the替换为THE
sed 's/the/THE/' test.txt
将每行中的所有the替换为THE
sed 's/the/THE/g' test.txt
在每行行首插入#号
sed 's/^/#/' test.txt
在每行行尾插入字符串EOF
sed 's/$/EOF/' test.txt
将包含the的所有行中的o都替换为O
sed '/the/s/o/O/g' test.txt
(4)迁移符合条件的文本
在第3行后插入一个新行,内容为New
sed '3aNew' test.txt
在包含the的每行后插入一个新行,内容为New
sed '/the/aNew' test.txt
在第3行后插入多行内容,中间的\n表示换行
sed '3aNew1\nNew2' test.txt
(5)sed直接操作文件
编写一本脚本,关闭防火墙和selinux,并配置IP为192.168.1.10
vim ip.sh
#!/bin/bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/dhcp/d' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$aIPADDR=192.168.1.10' /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
chmod +x ip.sh
./ip.sh
用来调整vsftpd服务配置:禁止匿名用户,但允许本地用户(也允许写入)
#!/bin/bash
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf"
CONFIG="/etc/vsftpd/vsftpd.conf"
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak
sed -e '/^anonymous_enable/s/YSE/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
sed -i '$apam_service_name=vsftpd' $CONFIG
sed -i '/^one/s/^/#' $CONFIG
systemctl restart vsftpd
systemctl enable vsftpd
4、awk工具
(1)按行输出文本
输出第1~3行内容
awk 'NR==1,NR==3{print}' test.txt
输出第1行,第3行内容
awk 'NR==1||NR==3{print}' test.txt
//输出以root开头的行
awk '/^root/{print}' /etc/passwd
(2)按字段输出文本
输出每行中(以空格分隔)的第1,3个字段
awk '{print $1,$3}' test.txt