liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -n /bin
1:root:x:0:0:root:/root:/bin/bash
3:bin:x:2:2:bin:/bin:/usr/sbin/nologin
5:sync:x:4:65534:sync:/bin:/bin/sync
12:proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
30:speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
-c 统计匹配行数
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -c /bin
10
-o 显示匹配内容
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -o /bin
/bin
/bin
/bin
模式部分(正则表达式)
相关简介
正则表达式由一类特殊的字符 或文本组成,有些字符(元字符)并不表示其字面内容,而是表示控制或通配功能。
字符通配
. 匹配任意单个字符 [ ] 匹配指定范围内的任意单个字符 [^] 匹配指定范围外的任意单个字符 [:alnum:] 字母和数字 [:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z [:lower:] 小写字母[:upper:] 大写字母 [:blank:] 空白字符(空格和制表符) [:space:]水平和垂直的空白字符(比[:blank:]包含的范围广) [:cntrl:] 不可打印的控制字符(退格、删除、警铃…) [:digit:] 十进制数字[:xdigit:]十六进制数字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 标点符号liuyan@liuyan-virtual-machine:~$ netstat -ant|grep -o 192.1.
192.16
192.16
192.16
[:alnum:] 字母和数字
liuyan@liuyan-virtual-machine:~$ netstat -ant|grep -o [[:alnum:]]
A
c
1
[:lower:] 小写字母[:upper:] 大写字母
liuyan@liuyan-virtual-machine:~$ netstat -ant|grep -o [[:lower:]]
c
t
i
[:digit:] 十进制数字[:xdigit:]十六进制数字
liuyan@liuyan-virtual-machine:~$ netstat -ant|grep -o [[:digit:]]
0
0
1
2
7
综合示例:
liuyan@liuyan-virtual-machine:~$ netstat -ant|grep [[:lower:]][[:lower:]][[:alnum:]][[:digit:]]
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
次数通配
*---------匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配) .*--------任意长度的任意字符 ?---------匹配其前面的字符0或1次 ±---------匹配其前面的字符至少1次 {n}-------匹配前面的字符n次 {m,n}----匹配前面的字符至少m次,至多n次 {,n}------匹配前面的字符至多n次 {n,}------匹配前面的字符至少n次liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ cat ff
telephonenumber is 13356487956
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ cat ff|grep -o 1[[:digit:]]\\{10\\}
18695250179
{m,n}----匹配前面的字符至少m次,至多n次
liuyan@liuyan-virtual-machine:~$ netstat -ant|grep -o [[:digit:]]\\{1\,3\\}\\.[[:digit:]]\\{1\,3\\}\\.[[:digit:]]\\{1\,3\\}\\.[[:digit:]]\\{1\,3\\}
127.0.0.53
0.0.0.0
0.0.0.0
0.0.0.0
127.0.0.1
0.0.0.0
位置锚定
^ 行首锚定,用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行 ^$ 空行 ^[[:space:]]*$ 空白行 或\b词尾锚定;用于单词模式的右侧 匹配整个单词liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ cat ff|grep 1[[:digit:]]\\{10\\}
telephonenumber is 13356487956
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ cat ff|grep -o ^tel[[:lower:]]\\{1\,\\}
telephonenumber
$ 行尾锚定,用于模式的最右侧
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ cat ff|grep 1[[:digit:]]\\{10\\}
telephonenumber is 13356487956
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ cat ff|grep -o [[:digit:]]\\{1\,\\}$
13356487956
综合案例
- 显示某目录下某文件中以大小s开头的行
首先输入cat命令查看相关信息liuyan@liuyan-virtual-machine:~$ cat /proc/meminfo
MemTotal: 4002280 kB
MemFree: 527556 kB
MemAvailable: 1396708 kB
Buffers: 68360 kB
Cached: 1044216 kB
SwapCached: 0 kB
Active: 2171800 kB
然后利用管道+grep命令过滤主要信息
liuyan@liuyan-virtual-machine:~$ cat /proc/meminfo |grep -e ^S -e ^s
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 79768 kB
Slab:
- 显示/etc/passwd文件中不以/bin/bash结尾的行
首先输入cat命令查看目标信息liuyan@liuyan-virtual-machine:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
然后通过管道利用grep命令过滤以/bin/bash结尾的信息
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep /bin/bash$
root:x:0:0:root:/root:/bin/bash
liuyan:x:1000:1000:liuyan,,,:/home/liuyan:/bin/bash
最后加入-v命令逆置过滤结果即可
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -v /bin/bash$
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
- 找出/etc/passwd中的两位或三位数
首先输入cat命令通过管道利用grep命令过滤含有两三位数的信息liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep [[:digit:]]\\{2\,3\\}
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
然后通过-o命令将数字提取即可
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -o [[:digit:]]\\{2\,3\\}
655
34
60
12
10
- 显示Ubuntu上所有系统用户的用户名和UID
首先输入cat命令查看信息liuyan@liuyan-virtual-machine:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
然后铜鼓管道加grep命令筛选用户名
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep ^[[:lower:]]\\{1\,\\}:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
利用正则表达式筛选用户名和Uid,最后利用-o命令提取即可
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -o -e ^[[:lower:]]\\{1\,\\}: -e :[[:digit:]]\\{1\,\\}:
root:
:0:
daemon:
:1:
bin:
:2:
sys:
- 找出/etc/passwd用户名同shell名的行
首先利用cat命令查看所属信息,然后通过管道利用grep命令过滤出用户名liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -o -e ^[[:lower:]]\\{1\,\\}
root
daemon
bin
sys
sync
games
man
lp
然后利用正则表达式过滤出bash,再利用-o命令提取即可
liuyan@liuyan-virtual-machine:~$ cat /etc/passwd|grep -o -e ^[[:lower:]]\\{1\,\\} -e /[[:lower:]]\\{1\,\\}$
root
/bash
daemon
/nologin
bin
/nologin
sys
/nologin
最后利用tr命令压缩空格,并赋值给数组后输出
liuyan@liuyan-virtual-machine:~$ a=$(cat /etc/passwd|grep -o -e ^[[:lower:]]\\{1\,\\} -e /[[:lower:]]\\{1\,\\}$|tr -s " ")
liuyan@liuyan-virtual-machine:~$ echo ${a}
root /bash daemon /nologin bin /nologin sys /nologin sync /sync games /nologin man /nologin lp /nologin mail /nologin news /nologin uucp /nologin proxy /nologin
- 利用df和grep,取出磁盘各分区利用率,并从大到小排序
利用df命令查看硬件使用数据liuyan@liuyan-virtual-machine:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 391M 2.0M 389M 1% /run
/dev/sda1 49G 9.3G 38G 20% /
tmpfs 2.0G 89M 1.9G 5% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
然后通过管道过滤百分比数字,再利用sort命令排序即可
liuyan@liuyan-virtual-machine:~$ df -h|grep [[:digit:]]\\{1\,3\\}%|sort -n
/dev/loop0 35M 35M 0 100% /snap/gtk-common-themes/818
/dev/loop10 92M 92M 0 100% /snap/core/8689
/dev/loop11 13M 13M 0 100% /snap/gnome-characters/139
/dev/loop1 2.3M 2.3M 0 100% /snap/gnome-calculator/260
/dev/loop12 4.3M 4.3M 0 100% /snap/gnome-calculator/544