文本处理三剑客:
grep:搜索工具
sed:文本编辑工具
awk
基本正则表达式:
字符匹配
.:匹配任意单个字符
+:匹配前面的字符一次或多次
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:]:数字
[[:disit:]]:匹配任意数字
[[:alnum:]]:匹配所有的字母和数字
[[:lower:]]:匹配任意小写字母
[[:upper:]]:匹配任意大写字母
[[:alpha:]]:匹配任意字母
<单词>:匹配完整单词
匹配次数
*:匹配前面字符任意次数
.*:匹配任意长度的任意字符
?:匹配前面的字符0次或1次
\ *:匹配前面的字符1次或多次
{m,n}:匹配前面的字符至少m次,至多n次({0,n}匹配至多n次;{1,}匹配至少1次)
位置锚定
^:行首锚定
$:行尾锚定
^$:空行
^ [[:space:]]$:空行或包含空白字符的行
< \b:词首锚定
练习:1、显示/etc/passwd中不以/bin/bash结尾的行
[root@node5 mnt]# grep -v /bin/bash$ /etc/passwd
-v为取反,$为行尾锚定
2、找出ifconfig命令中IP地址
[root@node5 ~]# ifconfig eth0 |grep inet |grep -v inet6 | cut -b 21-35
分组和应用:
\ (\ ):
\ (xy\ )\ (zd\ )ab1:在ab后匹配xy
\ (xy\ )\ (zd\ )ab2:在ab后匹配zd
[root@localhost ~]# grep l..e.*l..e file
he loves his lover
he likes his lover
she loves her lover
she likes her liker
[root@localhost ~]# grep "\(l..e\).*\1" file
he loves his lover
she loves her lover
she likes her liker
sed:
1、原理:非交互式编辑器,流式
脚本执行顺序:read(一行一行读取到模式空间)、execute、print、repeat
2、语法格式1:sed 选项 ‘[定址符]命令’ 文件
语法格式2:前指命令 | sed 选项 ‘[定址符]命令’
3、打印:
常用选项:
{}:可组合多个命令,以分号分隔
-n:不输出模式空间中的内容至屏幕
[root@localhost ~]# sed -n 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
test4:x:1001:1001::/home/test4:/bin/bash
test5:x:1002:1002::/home/test5:/bin/bash
test6:x:1003:1003::/home/test6:/bin/bash
[root@localhost ~]# sed -n '/^root/p' /etc/passwd(打印出/etc/passwd中以root开头的语句)
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# sed -n '2,3 p' /etc/passwd(打印出/etc/passwd/中的第2-3行)
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed -n '2,+3 p' /etc/passwd(打印出/etc/passwd中的第二行以及后面三行)
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# sed -n '3,/shutdown/ p' /etc/passwd(打印出/etc/passwd中第三行~以shutdown开头(包括)的内容)
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# sed -n '/^root/,/shutdown/ p' /etc/passwd(打印出/etc/passwd中以root开头的内容~以shutdown开头(包括)的内容)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# sed -n '$ p' /etc/passwd
test6:x:1003:1003::/home/test6:/bin/bash
-e:多点编辑
[root@localhost ~]# sed -n -e '/^root/ p' -e '/^apache/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost ~]# sed -n \
> -e '/^root/p' \
> -e '/^apache/p' \
> /etc/passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost ~]# sed -n -e '/^root/ p' -e '/^apache/ p' /etc/passwd(-e多点编辑,分别打印出/etc/passwd中以root开头和以apache开头的语句)
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
-f:将脚本文件的内容添加到要执行的命令中
[root@localhost ~]# cat test-script.sed
/^root/ p
[root@localhost ~]# sed -n -f test-script.sed /etc/passwd
root:x:0:0:root:/root:/bin/bash
-i:直接编辑原文件
[root@localhost ~]# sed -n '/^sync/,10 p' /etc/passwd(打印以sync开头到第十行(包括)的内容)
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# sed -n '1~2 p' /etc/passwd(从第1行开始,步长为2输出)
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nolo