文章目录
-
- [7.1 通配符](#7.1 通配符)
-
- [7.1.1 通配符介绍](#7.1.1 通配符介绍)
- [7.1.2 通配符示例](#7.1.2 通配符示例)
- [7.2 正则表达式](#7.2 正则表达式)
-
- [7.2.1 grep命令](#7.2.1 grep命令)
- [7.2.2 基本正则表达式](#7.2.2 基本正则表达式)
- [7.2.3 扩展正则表达式](#7.2.3 扩展正则表达式)
7.1 通配符
在 Shell 中通配符用于查找文件名和目录名。它是由 Shell 处理的,只会出现在命令的参数中。
7.1.1 通配符介绍
* 匹配任意长度的字符,可以是 0 个
? 匹配任意单个字符,必须是1个
[] 匹配指定的字符范围内的任意单个字符
[a-z,A-Z,0-9] 匹配所有字母和数字,可以不加逗号
[a-z] 匹配所有小写字母
[A-Z] 匹配所有大写字母
[A-z] 匹配所有大小写字母,等价于 [a-z,A-Z]
[:upper:] 匹配所有大写字母,等价于 [A-Z]
[:lower:] 匹配所有小写字母,等价于 [a-z]
[:alpha:] 匹配所有字母,等价于 [A-z]
[:digit:] 匹配所有数字,等价于 [0-9]
[:alnum:] 数字和大小写字母
[:space:] 匹配水平和垂直空白字符
[^] 匹配指定字符范围外的任意单个字符
[^0-9] 匹配除数字以外,它等价于[^[:digit:]]
7.1.2 通配符示例
- 显示当前工作目录下所有以
arr
开头的文件
bash
[root@openEuler ~]# ls a*
ahead arr1.sh arr2.sh arr3.sh
- 显示当前工作目录下所以在
arr
后有一个字符的文件
shell
[root@openEuler ~]# ls
ahead arr1.sh arr2.sh arr3.sh arrbb.sh arrb.sh ips myfile arr.sh
[root@openEuler ~]# ls arr?.sh
arr1.sh arr2.sh arr3.sh arrb.sh
- 显示当前工作目录下所有以
i
或m
开头的文件
bash
[root@openEuler ~]# ls
ahead arr1.sh arr2.sh arr3.sh arrbb.sh arrb.sh arr.sh ips myfile
[root@openEuler ~]# ls [im]*
ips myfile
- 显示当前工作目录下所有以字母开头的文件
bash
[root@openEuler ~]# touch {1..5}
[root@openEuler ~]# ls
1 3 5 arr1.sh arr3.sh arrb.sh i m
2 4 ahead arr2.sh arrbb.sh arr.sh ips myfile
[root@openEuler ~]# touch File{1,2}
[root@openEuler ~]# ls
1 3 5 arr1.sh arr3.sh arrb.sh File1 i m
2 4 ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
[root@openEuler ~]# ls [a-zA-Z]*
ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
arr1.sh arr3.sh arrb.sh File1 i m
[root@openEuler ~]# ls [[:alpha:]]*
ahead arr1.sh arr2.sh arr3.sh arrbb.sh arrb.sh arr.sh
[root@openEuler ~]# ls [A-z]*
ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
arr1.sh arr3.sh arrb.sh File1 i m
- 显示所有以数字开头的文件
bash
[root@openEuler ~]# ls
1 3 5 arr1.sh arr3.sh arrb.sh File1 i m
2 4 ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
[root@openEuler ~]# ls [0-9]*
1 2 3 4 5
[root@openEuler ~]# ls [[:digit:]]*
1 2 3 4 5
- 显示所有数字和字母开头的文件
bash
[root@openEuler ~]# ls
1 3 5 arr1.sh arr3.sh arrb.sh File1 i m
2 4 ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
[root@openEuler ~]# ls [a-zA-Z0-9]*
1 3 5 arr1.sh arr3.sh arrb.sh File1 i m
2 4 ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
[root@openEuler ~]# ls [A-z0-9]*
1 3 5 arr1.sh arr3.sh arrb.sh File1 i m
2 4 ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
[root@openEuler ~]# ls [[:alnum:]]*
1 3 5 arr1.sh arr3.sh arrb.sh File1 i m
2 4 ahead arr2.sh arrbb.sh arr.sh File2 ips myfile
7.2 正则表达式
正则表达式是通过一些特殊字符的排列,用于查找、替换、删除一行或多行字符串。它的操作是针对于文件的内容,则前面讲的通配符是针对于文件和目录名的操作。
我们以前面讲的 *
号为例,来说明通配符和正则表达式的区别:如果*
是用于查找文件名或目录名时,表示可以匹配0到多个任意字符,如果*
用于查找文件的内容,则表示重复匹配前一个字符0到多次。
在 Shell 中,正则表达式分类两种:
- 基本正则表达式
- 扩展正则表达式
7.2.1 grep命令
grep 命令是用于查询或过滤字符的命令,它的语法格式如下:
shell
Usage: grep [OPTION]... PATTERNS [FILE]...
Search for PATTERNS in each FILE.
命令的常用选项介绍:
-n, --line-number 显示行号
-o, --only-matching 只显示匹配的行
-q, --quiet, --silent 静默模式,没有任何输出,要获取内容需要与 $? 来配合使用。
-l, --files-with-matches 如果匹配成功,则只将文件名称打印出来,如果匹配失败,则通过会与 -rl 一起使用
-A, --after-context=NUM 如果匹配成功,则将匹配当前行及其之后 NUM 行一起打印输出
-B, --before-context=NUM 如果匹配成功,则将匹配当前行及其之前 NUM 行一起打印输出
-C, --context=NUM 如果匹配成功,则将匹配行及其前后 NUM 行一起打印输出
-c, --count 如果匹配成功,则将匹配到的行数打印输出
-E, --extended-regexp 正则扩展匹配,需要使用 grep -E 或者 egrep 命令才可以
-i, --ignore-case 忽略大小写匹配
-v, --invert-match 取反,打印不匹配的内容
-V, --version 显示版本信息
-w, --word-regexp 匹配单词
-x, --line-regexp 匹配行
-s, --no-messages 不显示关于不存在的或者无法读取文件错误信息
-r, --recursive 递归匹配
使用示例:
shell
# 输出匹配的行号
[root@openEuler ~]# grep -n ro* /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
# 只输出匹配的内容
[root@openEuler ~]# grep -o redhat /etc/passwd
redhat
redhat
redhat
[root@openEuler ~]# grep -o root /etc/passwd
root
root
root
root
# 打印匹配行及其后3行内容
[root@openEuler ~]# grep -A 3 adm /etc/passwd
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
# 打印匹配行及其前3行内容
[root@openEuler ~]# grep -B 3 adm /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
# 打印匹配行及其前后3行内容
[root@openEuler ~]# grep -C 3 adm /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
# 匹配指定的单词
[root@openEuler ~]# grep -w adm /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
# 不区分大小写匹配
[root@openEuler ~]# grep -w DNS /etc/passwd
unbound:x:997:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
[root@openEuler ~]# grep -w dns /etc/passwd
[root@openEuler ~]# grep -wi dns /etc/passwd
unbound:x:997:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
# 匹配除了nologin单词以外的所有内容
[root@openEuler ~]# grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
7.2.2 基本正则表达式
基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式。
字符 | 含义 |
---|---|
^ | 在每行的开始进行匹配 |
$ | 在每行的末尾进行匹配 |
. | 对任何单个字符进行匹配 |
* | 对前一项进行0次或多次重复匹配 |
[str] | 对str中的任何单个字符进行匹配 |
[^str] | 对任何不在str中的单个字符进行匹配 |
[a-b] | 对a到b之间的任何字符进行匹配 |
\ | 忽略后面一个字符的特殊含义 |
使用示例:
- 在
/etc/passwd
文件中搜索以root
开头的内容
shell
[root@openEuler ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
- 在
/etc/passwd
文件中搜索以nologin
结尾的所有行
shell
[root@openEuler ~]# grep nologin$ /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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
....output omitted....
- 在
~/passwd
文件中搜索b开头,n结尾,并且中间只有一个字符的所有行
shell
[root@openEuler ~]# cat /etc/passwd > passwd
[root@openEuler ~]# echo ban:x::::: >> passwd
[root@openEuler ~]# grep b.n 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
.....output omitted.....
ban:x:::::
- 在
~/passwd
文件中搜索包含ro*
字符串的所有行
shell
[root@openEuler ~]# cat /etc/passwd > passwd
[root@openEuler ~]# echo ban:x::::: >> passwd
[root@openEuler ~]# echo ro >> passwd
[root@openEuler ~]# echo roo >> passwd
[root@openEuler ~]# echo rooooooo >> passwd
[root@openEuler ~]# grep ro* passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
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:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
unbound:x:997:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
libstoragemgmt:x:996:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:D-Bus:/var/run/dbus:/sbin/nologin
polkitd:x:995:993:User for polkitd:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
cockpit-ws:x:993:990:User for cockpit-ws:/:/sbin/nologin
chrony:x:992:989::/var/lib/chrony:/sbin/nologin
systemd-network:x:987:987:systemd Network Management:/:/usr/sbin/nologin
systemd-resolve:x:986:986:systemd Resolver:/:/usr/sbin/nologin
systemd-timesync:x:985:985:systemd Time Synchronization:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
ro
roo
rooooooo
- 在
~/passwd
文件中搜索能够匹配r[opu]*
的所有行
shell
[root@openEuler ~]# grep r[opu]* ~/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
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:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
unbound:x:997:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
libstoragemgmt:x:996:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:D-Bus:/var/run/dbus:/sbin/nologin
polkitd:x:995:993:User for polkitd:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
cockpit-ws:x:993:990:User for cockpit-ws:/:/sbin/nologin
chrony:x:992:989::/var/lib/chrony:/sbin/nologin
systemd-network:x:987:987:systemd Network Management:/:/usr/sbin/nologin
systemd-resolve:x:986:986:systemd Resolver:/:/usr/sbin/nologin
systemd-timesync:x:985:985:systemd Time Synchronization:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
ro
roo
rooooooo
[root@openEuler ~]# grep r[opu]. ~/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:996:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dbus:x:81:81:D-Bus:/var/run/dbus:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
chrony:x:992:989::/var/lib/chrony:/sbin/nologin
systemd-timesync:x:985:985:systemd Time Synchronization:/:/usr/sbin/nologin
roo
rooooooo
^$
表示空行,不是空格。
shell
[root@openEuler ~]# grep -n ^$ passwd
4:
7:
8:
9:
10:
17:
18:
- 在
~/passwd
文件中匹配至少2个o
,最多4个o
的行
shell
[root@openEuler ~]# grep -E "ro{2,4}" ~/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roo
rooooooo
注意:要实现这个功能,我们需要添加 -E 选项,因为这是扩展正则表达式,基本正则表达的写法不能处理扩展正则表达式。
7.2.3 扩展正则表达式
扩展正则表达式(Extended Regular Expression,ERE)支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的元字符"^"、"$"、"."、"*"、"[]"以及"[^]"
这6个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。
字符 | 含义 |
---|---|
+ | 对前一项进行1次或多次重复匹配 |
? | 对前一项进行0次或1次重复匹配 |
{n} | 对前一项进行 n 次重复匹配 |
{n,} | 对前一项进行 n 次或更多次重复匹配 |
{,m} | 对前一项最多进行 m 次重复匹配 |
{n,m} | 对前一项至少匹配 n 次,最多匹配 m 次 |
(s|t) | 匹配s项或t项中的一项 |
注意:使用扩展正则表达时,可以使用
grep -E
命令,也可以使用egrp
命令,推荐使用 egrep 来处理扩展正则表达式
使用示例:
- 显示
/etc/passwd
文件中以bash
结尾的行;
shell
[root@openEuler ~]# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@openEuler ~]# grep -E bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@openEuler ~]# egrep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
- 找出
/etc/passwd
文件中的三位或四位数;
shell
[root@openEuler ~]# grep -E "[0-9]{3,4}" /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
unbound:x:997:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
libstoragemgmt:x:996:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
polkitd:x:995:993:User for polkitd:/:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
cockpit-ws:x:993:990:User for cockpit-ws:/:/sbin/nologin
chrony:x:992:989::/var/lib/chrony:/sbin/nologin
systemd-network:x:987:987:systemd Network Management:/:/usr/sbin/nologin
systemd-resolve:x:986:986:systemd Resolver:/:/usr/sbin/nologin
systemd-timesync:x:985:985:systemd Time Synchronization:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@openEuler ~]# egrep "[[:digit:]]{3,4}" /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
unbound:x:997:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
libstoragemgmt:x:996:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
polkitd:x:995:993:User for polkitd:/:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
cockpit-ws:x:993:990:User for cockpit-ws:/:/sbin/nologin
chrony:x:992:989::/var/lib/chrony:/sbin/nologin
systemd-network:x:987:987:systemd Network Management:/:/usr/sbin/nologin
systemd-resolve:x:986:986:systemd Resolver:/:/usr/sbin/nologin
systemd-timesync:x:985:985:systemd Time Synchronization:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
- 找出
/etc/grub2.cfg
文件中,以至少一个空白字符开头,后面又跟了非空白字符的行;
shell
[root@openEuler ~]# egrep "^[[:space:]]+[^[:space:]]+" /etc/grub2.cfg
load_env -f ${config_directory}/grubenv
load_env
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
set default="${saved_entry}"
menuentry_id_option="--id"
menuentry_id_option=""
set saved_entry="${prev_saved_entry}"
...output omitted...
- 找出
"netstat -tan"
命令的结果中,以'LISTEN'
后跟0个或多个空白字符结尾的行;
shell
[root@openEuler ~]# netstat -tan|grep -E "LISTEN[[:space:]]*$"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
- 找出
"fdisk -l"
命令的结果中,取出硬盘路径;
shell
[root@openEuler ~]# fdisk -l|grep -E "Disk[[:space:]]/[^[:space:]]+"
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Disk /dev/mapper/openeuler-root: 45.07 GiB, 48393879552 bytes, 94519296 sectors
Disk /dev/mapper/openeuler-swap: 3.93 GiB, 4215275520 bytes, 8232960 sectors
- 找出
"ldd /usr/bin/cat"
命令的结果中文件路径;
shell
[root@openEuler ~]# ldd /usr/bin/cat | egrep "/([a-z,0-9,.]|-)+"
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f8aa4d2e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8aa4f49000)
[root@openEuler ~]# ldd /usr/bin/cat | egrep "/[^[:space:]]+"
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fe49806e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe498289000)
- 找出
/proc/meminfo
文件中,所有以大写或小写s开头的行
shell
[root@openEuler ~]# cat /proc/meminfo | egrep "^(S|s)"
SwapCached: 0 kB
SwapTotal: 4116476 kB
SwapFree: 4116476 kB
Shmem: 8844 kB
Slab: 86148 kB
SReclaimable: 39424 kB
SUnreclaim: 46724 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
[root@openEuler ~]# egrep "^(S|s)" /proc/meminfo
SwapCached: 0 kB
SwapTotal: 4116476 kB
SwapFree: 4116476 kB
Shmem: 8844 kB
Slab: 86132 kB
SReclaimable: 39424 kB
SUnreclaim: 46708 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
- 显示当前系统上
root
、redhat
或spark
用户的相关信息;
shell
[root@openEuler ~]# egrep "(root|redhat|spark)" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
echo
输出一个绝对路径,使用egrep
取出其基名;
shell
[root@openEuler ~]# echo /usr/local/cat | egrep "^/[a-z]+"
/usr/local/cat
- 找出
ifconfig
命令结果中的1-255之间的整数;
shell
[root@openEuler ~]# ifconfig | egrep -w "[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5]"
inet 192.168.72.150 netmask 255.255.255.0 broadcast 192.168.72.255
inet6 fe80::20c:29ff:fe4f:96ec prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4f:96:ec txqueuelen 1000 (Ethernet)
RX packets 18333 bytes 17737370 (16.9 MiB)
TX packets 5505 bytes 581056 (567.4 KiB)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
- 找出
ifconfig
命令输出中的所有IP地址
shell
[root@openEuler ~]# ifconfig | egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
192.168.72.150
255.255.255.0
192.168.72.255
127.0.0.1
255.0.0.0