grep
文本过滤工具
命令格式:grep 匹配条件 处理文件
命令操作:
grep root /etc/passwd ,过滤包含root关键字的内容
grep ^root /etc/passwd ,以root开头的内容
grep bash$ /etc/passwd ,以bash结尾
grep -i root /etc/passwd ,后略大小写,文件里暂时没有大写的root
grep -iE “<root” /mnt/passwd ,root字符之前不能有字符,“:”这种符号是不算的
grep -iE “root>” /mnt/passwd ,root字符之后不能有字符
grep -数字 root /etc/passwd,显示过滤行以及上面几行和下面几行
grep -n root /etc/passwd,显示匹配的行所在行号
grep -A数字 root /etc/passwd,显示过滤行以及下面几行
grep -B数字 root /etc/passwd,显示过滤行以及上面几行
grep -v root /etc/passwd,反向过滤,除包含root以外的内容
多个条件匹配:grep -E “^root|ROOT” /mnt/passwd ,root开头或者包含ROOT的内容
grep字符数量匹配规则
grep ^root 处理文件 | 以root开有 |
grep root$ 处理文件 | 以root结尾 |
grep r.t 处理文件 | r开头t结尾中间2个任意字符 |
grep …t 处理文件 | t结尾前面3个任意字符 |
grep -E root* 处理文件 | 字符出现0到任意次 |
grep -E ro?ot 处理文件 | ?前的字符是被处理的,o出现的次数0到1次 |
grep -E ro+ot 处理文件 | +前的字符是被处理的,o出现的次数1到任意次 |
grep -E “ro{n}t” 处理文件 | n次,n=自定义数字 |
grep -E “ro{m,n}t” 处理文件 | m到n次,m、n数字自定义,n>m |
grep -E “ro {0,n}t” 处理文件 | 出现0-n次 |
grep -E “ro{,n}t” 处理文件 | 出现0-n次 |
grep -E “ro{m,}t” 处理文件 | 最少出现m次 |
grep -E “(root){2}” 处理文件 | root字符串出现2次 |
- grep r…t 处理文件 r开头t结尾中间2个任意字符
- grep …t 处理文件 t结尾前面3个任意字符
- grep -E ro?ot 处理文件 ?前的字符是被处理的,o出现的次数0到1次
- grep -E ro+ot 处理文件 +前的字符是被处理的,o出现的次数1到任意次
- grep -E ro{n}t 处理文件 n次,n=自定义数字
- grep -E “ro{m,n}t” 处理文件 m到n次,m、n数字自定义,n>m
- grep -E “(root){2}” 处理文件 root字符串出现2次
sed
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
对字符的处理参数说明
参数p
p | 显示 |
---|---|
sed -n 5p passwd | 显示第5行 |
sed -n 3,5p passwd | 显示3到5行 |
sed -ne “3p;5p” passwd | 显示3和5行 |
sed -ne ‘5,$p’ passwd | 5到最后的行 |
sed -n ‘/^s/p’ passwd | 显示以s开头的行 |
-
sed -n 5p passwd |显示第五行
-
sed -n 3,5p passwd |显示3到5行
-
sed -ne “3p;5p” passwd |显示3和5行
-
sed -ne ‘5,$p’ passwd |5到最后以行
-
sed -n ‘/^s/p’ passwd |显示以s开头的行
参数d,删除
-
sed 1d passwd ,删除第1行
-
sed ‘/^s/d’ passwd ,把s开头的行删除
-
sed ‘/^user/!d’ passwd ,除了user以外的行都删除
-
sed -e ‘5,$d’ passwd ,删除5到最后一行
参数a,添加
- sed -e ‘$a hello world’ passwd,添加hello在最后
- sed -e ‘$a hello\nworld’ passwd ,添加的hello world 是换行的
- sed -e ‘/^s/a hello world’ passwd ,在s开头的行下面添加hello world
参数c,替换
- sed -e ‘/^s/c hello world’ passwd ,把s开头的行替换为hello world
- sed ‘5chello world’ passwd ,替换第五行为hello world
参数w: 写入
- sed ‘/^user/w testfile’ passwd ,把passwd中user开头的行写入testfile中
参数i :插入
- sed ‘5i hello world’ passwd,把hello world 插入到第五行
参数r :整合文件
- sed ‘5r testfile’ passwd ,将testfile里的内容整合到passwd文件的第五行下面
sed 字符替换
-
sed ‘s/: /###/g’ passwd,将所有 :替换为###
-
sed ‘s/: /###/’ passwd,只将第一列的:替换为 ###
-
sed ‘1,5s/: /###/g’ passwd ,将1-5行的:替换为 ###
-
sed ‘1s/: /###/g’ passwd ,只将第1行:替换为 ###
-
sed ‘1s/: /###/g;5s/: /###/g’ passwd ,将1和5行的:替换为 ###
-
sed ‘/lp/,/shutdown/s/: /###/g’ passwd ,将lp 到 shutdown 之间的行的: 替换为 ###
-
sed ‘s///###/g’ passwd ,将所有 / 替换为 ### ,因为 / 在命令中表示特殊含义所以用 \ 转译
这里也可以使用 @ 来代替 / 的作用在命令中:sed ‘s@/@###@g’ passwd
以上sed的所有操作都是临时展示,不会保存在操作文件里,如果要保存结果需要加参数 -i 将操作保存,
sed ‘s@/@###@g’ -i passwd ,把sed处理的内容保存到passwd文件中
awk 报告生成器
命令格式: awk -F 分隔符 BEGIN{}{}END{} FILENAME
命令操作:
- NR #行数,最直接i就是列出所有的行号
- NF #列数,指定分割符就可以标出每行有多少列
- FILENAME ,表示文件名称本身,在awk命令中写入表示输出的都是被处理文件的文件名:awk ‘/bash$/{print FILENAME}’ passwd ,查找bash结尾的行以文件名显示
- 变量,在awk命令中,{}里的值如果用 " " 括起来表示字符串,没有 " " 括起来表示变量,变量的值需要去特殊指定:awk ‘/bash$/{print “111”}’ passwd ,查找bash结尾的行以111代替显示
awk报告生成的方式:
条件表示 | 说明 |
---|---|
awk /bash$/ | #条件 |
/条件1|条件2/ | 条件1或者条件2 ,在一个条件里的两个子条件 |
/条件1/||/条件2/ | 条件1或者条件2 |
/条件1/&&/条件2/ | 条件1并且条件2 |
行中的列表示 | 说明 |
---|---|
$0 | 所有的列 |
$1 | 第一列 |
$2 | 第二列 |
$3 | 第三列 |
… | … |
awk -F : ‘/sh$/||/bash$/{print $1}’ passwd,查找sh或bash结尾的行,并打印第一列
awk -F : ‘/sh$|bash$/{print $1}’ passwd ,查找sh或bash结尾的行,并打印第一列
awk -F : ‘/^user/&&/bash$/{print $0}’ passwd,查找user开头并且bash结尾的行,打印出全部
其他用法
awk -F : ‘$6~/home/{print}’ passwd ,打印出第六列是home的行
awk -F : ‘$6~/home/&&!/^user/{print}’ passwd,打印出第六列是home并且不是以user开头的行
awk -F : ‘$6!~/home/{print}’ passwd,打印出第六列不是home的行
awk ‘BEGIN{n=0} {n++} END{print n}’ passwd ,打印出文件行数