通常用于对每一行的字符串进行匹配。
用法 1:默认参数下的模糊匹配,可以理解为like
,或者包含
# 查询/etc/passwd 中带有 root 的行
cat /etc/passwd | grep root
## 结果:
root:*:0:0:System Administrator:/var/root:/bin/sh
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false
用法 2:-w
的精准匹配,通过空格和特殊符号分词后,必须是等于才可以。
cat /etc/passwd | grep -w root
# 比较上例结果,可以看到`_cvmsroot`就不出现了
root:*:0:0:System Administrator:/var/root:/bin/sh
用法 3:-v
对匹配取反,可以理解为文本中不含有指定字符的内容
# 查询/etc/passwd 中不带有 root 的行
cat /etc/passwd | grep -v root
## 结果
_datadetectors:*:257:257:DataDetectors:/var/db/datadetectors:/usr/bin/false
_captiveagent:*:258:258:captiveagent:/var/empty:/usr/bin/false
用法 4:-n
获取行号
cat /etc/passwd | grep -n root
# 结果带有行号
12:root:*:0:0:System Administrator:/var/root:/bin/sh
62:_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false
用法 5:-i
忽略大小写
cat /etc/passwd | grep -i Root
#结果
root:*:0:0:System Administrator:/var/root:/bin/sh
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false
用法 6:^
匹配开头内容,就是必须是指定字符开头的内容
cat /etc/passwd | grep ^root
#结果,
root:*:0:0:System Administrator:/var/root:/bin/sh
当然这些参数是可以组合使用的。
该指令通常用于:通过某个分隔符分隔内容后获取某些行的内容。
用法 1:通过-d
指定分隔符,然后-f
获取行。下面例子通过:
分隔内容,并输出第 1 列和第 4 列
cat /etc/passwd | grep ^root | cut -d ':' -f 1,4
#结果
root:*
# 1-4 表示的内容从第 1 列到第 4 列
cat /etc/passwd | grep ^root | cut -d ':' -f 1-4
# 2- 表示内容从第 2 列开始直到最后
cat /etc/passwd | grep ^root | cut -d ':' -f 2-
用法 2:通过-c
截取文件从某个index
开始的内容
cat /etc/passwd | grep ^root | cut -c 1-4
# 原本的内容是:root:*:0:0:System Administrator:/var/root:/bin/sh
# 输出结果
root
grep
和 cut
是对文本的选取,sed就侧重对内容进行变更了,当然他也支持匹配。
用法 1:输出某一行的内容,-n
和p
结合使用
# 输出内容的第三行
df -h | sed -n '3p'
用法 2:删除某些行
# 只删除第三行
df -h | sed '3d'
# 将 1-4 行进行删除
df -h | sed '1,4d'
# 从第 2 行起全部删除
df -h | sed '2,$d'
更多用法可以参考:https://www.runoob.com/linux/linux-comm-sed.html
本文未完结,内容持续添加...