shell 编程-grep
grep命令是Globally search a Regular Expression and Print的缩写,表示进行全局的正则匹配并进行打印。grep的相关扩展命令egrep其中egrep支持更多的正则匹配。
grep基本正则匹配
< 词首定位符号 >词尾定位符号
[root@linux-server ~]# cat jack.txt Jack JACK JAck jackly jack :% s/<[Jj]ack>/123/g
^以什么开头 [root@linux-server ~]# grep ‘^root’ /etc/passwd KaTeX parse error: Expected 'EOF', got '#' at position 28: …linux-server ~]#? grep 'bash’ /etc/passwd root?0:0:root:/root:/bin/bash confluence?1000:1000:Atlassian Confluence:/home/confluence:/bin/bash to?1003:1003::/home/to:/bin/bash
. 匹配单个字符 [root@linux-server ~]# grep ‘r…t’ /etc/passwd root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin ftp?14:50:FTP User:/var/ftp:/sbin/nologin dockerroot?998:995:Docker User:/var/lib/docker:/sbin/nologin [root@linux-server ~]# grep ‘r.t’ /etc/passwd operator?11:0:operator:/root:/sbin/nologin sshd?74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
.* 任意多个字符 [root@linux-server ~]# grep ‘r.*t’ /etc/passwd root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin ftp?14:50:FTP User:/var/ftp:/sbin/nologin systemd-network?192:192:systemd Network Management:/:/sbin/nologin polkitd?999:997:User for polkitd:/:/sbin/nologin postfix?89:89::/var/spool/postfix:/sbin/nologin sshd?74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dockerroot?998:995:Docker User:/var/lib/docker:/sbin/nologin tss?59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin apache?48:48:Apache:/usr/share/httpd:/sbin/nologin abrt?1041:1041::/home/abrt:/bin/bash
[] 匹配方括号中的任意一个字符 [root@linux-server ~]# useradd Root [root@linux-server ~]# grep ‘Root’ /etc/passwd [root@linux-server ~]# grep ‘[Rr]oot’ /etc/passwd root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin Root?1000:1000::/home/Root:/bin/bash
[ - ] 匹配指定范围内的一个字符 [root@linux-server ~]# grep [a-z]oot /etc/passwd #a-z root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin dockerroot?998:995:Docker User:/var/lib/docker:/sbin/nologin
[^] 匹配不在指定组内的字符,非得意思 [root@linux-server ~]# grep ‘[^0-9]’ /etc/passwd
[root@linux-server ~]# grep ‘[^0-9A-Z]oot’ /etc/passwd root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin dockerroot?998:995:Docker User:/var/lib/docker:/sbin/nologin #注意:在[]内表示取反,在[]外表示以什么开头
()匹配后的标签 [root@linux-server ~]# cat file1.txt IPADDR=192.168.1.123 GATEWAY=192.168.1.1 NETMASK=255.255.255.0 DNS=114.114.114.114 用法; :%s/(192.168.1.)123/\12/ :%s/(192.)(168.)(1.)12/\1\2\35/
扩展正则匹配—egrep
egrep 支持正则表达式的拓展元字符 [root@linux-server ~]# egrep ‘[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}’ /etc/resolv.conf nameserver 192.168.246.2
- 匹配一个或多个前导字符
[root@linux-server ~]# egrep ‘ro+t’ /etc/passwd root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin dockerroot?998:995:Docker User:/var/lib/docker:/sbin/nologin
a|b 匹配a或b [root@linux-server ~]# netstat -anlp|egrep ‘:80|:22’ [root@linux-server ~]# egrep ‘root|jack’ /etc/passwd root?0:0:root:/root:/bin/bash operator?11:0:operator:/root:/sbin/nologin jack1?1001:1001::/home/jack1:/bin/bash jack2?1002:1002::/home/jack2:/bin/bash
x{m} 字符x重复m次 [root@linux-server ~]# cat a.txt love love. loove looooove [root@linux-server ~]# egrep ‘o{2}’ a.txt loove looooove [root@linux-server ~]# egrep ‘o{2,}’ a.txt loove looooove [root@linux-server ~]# egrep ‘o{6,7}’ a.txt
shell 编程-SED
sed:stream editor(流编辑器)的缩写是一种在线非交互式编辑器,它一次处理一行内容。这样不断重复,直到文件末尾。
Sed主要用
来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
非交互式编辑器,一次处理一行内容。
支持正则表达式 与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符,用于查找和替换,以下是sed支持的元字符: 使用基本元字符集 ^, $, ., *, [], [^], < >,() 使用扩展元字符集 ?, +, { }, |, ( ) sed基本用法
打印
sed 默认会输出文件的每一行,无论这行内容是否能匹配上匹配模式 语法: sed -r ‘匹配内容’ file_name -r:支持扩展正则,在实际使用的时候,都会加上 -r 参数,即使没有用的扩展正则也不会有任何影响。
搜索替换
sed会自动打印文件的每一行,同时查找模式匹配的行,找到后执行后面的命令,默认是 p 打印(不加 -n 的情况下)
4.-n #静默输出(不打印默认输出)
[root@localhost ~]# sed -r -n ‘s/MA/Massachusetts/’ test.txt 案例: [root@localhost ~]# sed -r ‘s/SELINUX=disabled/SELINUX=enabled/’ /etc/sysconfig/selinux
多重编辑选项
地址(定址)
地址用于决定对哪些 行 进行编辑。地址形式可以是数字、正则表达式或二者的结合。如果没有指定地址,sed将处理输入文件中的所有行
sed流编辑器命令用法及解析
sed常见操作
|