驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
shell中grep和sed常用功能
/  

shell中grep和sed常用功能

grep

通常用于对每一行的字符串进行匹配。

用法 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

当然这些参数是可以组合使用的。

cut

该指令通常用于:通过某个分隔符分隔内容后获取某些行的内容。

用法 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

sed

grepcut是对文本的选取,sed就侧重对内容进行变更了,当然他也支持匹配。

用法 1:输出某一行的内容,-np结合使用

# 输出内容的第三行
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

结语

本文未完结,内容持续添加...

骐骥一跃,不能十步。驽马十驾,功在不舍。