一、grep——文本过滤工具
文本过滤器(模式:pattern)工具,grep,egrep(不支持正则表达式搜索)
grep [选项] 条件 目标文件
选项 | 作用 |
---|
–color=auto | 对匹配到的文本着色显示 | -v | 显示不被pattern匹配到的行 | -n | 显示行数 | -c | 统计匹配到的行数 | -o | 仅显示匹配到的字符串 |
二、sed——编辑器
sed [选项] ‘操作’ 参数
sed [选项] -f scripfile 参数
选项 | 作用 |
---|
-e script : | 指定sed编辑命令 | -f scriptfile : | 指定的文件中是sed编辑命令 | -h : | 显示帮助 | -n : | 表示仅显示处理后的结果 | -i : | 直接编辑文本文件 | -r, -E | 使用扩展正则表达式 | -s | 将多个文件视为独立文件,而不是单个连续的长文件流 |
操作 | 作用 |
---|
a : | 增加,在当前行下面增加一行指定内容 | c : | 替换,将选定行替换为指定内容 | d : | 删除,删除选定的行 | i : | 插入,在选定行上面插入一行指定内容 | p : | 打印 | s : | 替换,替换指定字符 | y : | 字符转换 |
输出符合条件的文本
输出第三行
sed -n ‘3p’ test.txt
输出第3-5行
sed -n ‘3,5p’ test.txt
输出所有奇数行
sed -n ‘p;n’ test.txt
输出所有偶数行
sed -n ‘n;p’ test.txt
输出第1-5行之间的奇数行
sed -n ‘1,5{p;n}’ test.txt
输出第10行之后的偶数行
sed -n ’10,${n;p}’ test.txt
输出包含the的行
sed -n ‘/the/p’ test.txt
输出从第4行的第一个包含the的行
sed -n ‘4,/the/p’ test.txt
输出以PI开头的行
sed -n ‘/^PI/p’ test.txt
输出以数字结尾的行
sed -n ‘/[0-9]$/p’ test.txt
输出包含wood的行
sed -n '/\<wood\>/p' test.sh
删除符合条件的文本
删除第3行
sed ‘3d’ test.txt
删除第3-5行
sed ‘3,5d’ test.txt
删除以小写字母开头的行
sed ‘/^[a-z]/d’ test.txt
替换符合条件的文本
将每行中的第一个the替换为THE
sed ‘s/the/THE/’ test.txt
将每行中的第2个l替换为L
sed ‘s/l/L/2’ test.txt
在包含the的每行行首插入#号
sed 's/^/#/' test.txt
在每行行尾插入字符串EOF
sed ‘s/$/EOF/’ test.txt
将第3-5行中的所有the替换为THE
sed ‘3,5s/the/THE/g’ test.txt
将包含the的所有行中的o替换为O
sed ‘/the/s/o/O/g’ test.txt
将文件中所有的o删除
sed ‘s/o//g’ test.txt
迁移符合条件的文本
选项 | 作用 |
---|
H : | 复制到剪切板 | g、G : | 将剪贴板中的数据覆盖/追加到指定行 | w : | 保存为文件 | r : | 读取指定文件 | a : | 追加指定内容 |
将包含the的行迁移至文件末尾
sed ‘/the/{H;d};$G’ test.txt
将第1-5行内容转移至第17行后
sed ‘1,5{H’d};17G’ test.txt
将包含the的行号另存为文件out.file
sed ‘/the/w out.file’ test.txt
将文件/etc/hostname的内容添加到包含the的每行以后
sed ‘/the/r /etc/hostname’ test.txt
在第3行后插入一个新行,内容为NEW
sed ‘/the/3aNEW’ test.txt
在包含the的每行后插入一个新行,内容为NEW
sed ‘/the/aNEW’ test.txt
在第3行后插入多行内容,中间的\n表示换行
sed ‘3aNEW1\nNEW3’ test.txt
三、awk——报告生成器
awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容
- awk包含几个特殊的内建变量(可直接用)如下所示:
变量 | 意义 |
---|
FS: | 指定每行文本的字段分隔符,默认为空格或制表位; | NF: | 当前处理的行的字段个数; | NR: | 当前处理的行的行号(序数); | $0: | 当前处理的行的整行内容; | $n: | 当前处理的行的第n个字段(第n列); | FILENAME: | 被处理的文件名; | RS: | 数据记录分隔,默认为\n,即每行为一条记录。 |
按行输出文本
输出所有内容,等同于cat test.txt
awk ‘{print}’ test.txt
awk ‘{print $0}’ test.txt
输出第1~3行内容
awk ‘NR==1,NR==3{print}’ test.txt
输出第1~3行内容
awk ‘(NR>=1)&&(NR<=3){print}’ test.txt
输出第1行,第3行的内容
awk ‘NR==1||NR==3{print}’ test.txt
输出所有奇数行的内容
awk ‘(NR%2)==1{print}’ test.txt
输出所有偶数行的内容
awk ‘(NR%2)==0{print}’ test.txt
输出以root开头的行
awk ‘/^root/{print}’ /etc/passwd
输出以nologin结尾的行
awk ‘/nologin$/{print}’ /etc/passwd
统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$” /etc/passwd
awk ‘BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}’ /etc/passwd
统计以空行分隔的文本段落数
awk ‘BEGIN {RS=””} ;END{print NR}’ test.txt
按字段输出文本
输出每行中(以空格或制表符分隔)的第三个字段
awk ‘{print $3}’ test.txt
输出每行中第1,3个字段
awk ‘{print $1,$3}’ test.txt
输出密码为空的用户的shadow记录
awk -F ”:” ‘$2==””{print}’ /etc/shadow
输出密码为空的用户的shadow记录
awk ‘BEGIN {FS=”:”} ; $2==””{print}’ /etc/shadow
输出以冒号分隔且第7个字段中包含/bash的行的第一个字段
awk -F ”:” ‘$7~”/bash”{print $1}’ /etc/shadow
输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段
awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services
输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行
awk -F “:” ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd
打印文本文件的总行数
awk 'END{print NR}' filename
打印文本第二行第一列
sed -n "2, 1p" filename | awk 'print $1'
输出文件最后一行
awk -F: '{print $NF}' zz
输出文件的倒数第二列以","隔开
awk -F ',' 'END {print $2}' BIRoomTime20160229.txt
shell里面的赋值方法有两种,格式为
- arg=
(命令) - arg=$(命令)
因此,如果想要把某一文件的总行数赋值给变量nlines,可以表达为:
- nlines=
(awk 'END{print NR}' filename) 或者 - nlines=$(awk ‘END{print NR}’ filename)
通过管道、双引号调用Shell命令
调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$” /etc/passwd
awk -F: ‘/bash$/{print | “wc -l”}’ /etc/passwd
调用w命令,并用来统计在线用户数
awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’
调用hostname,并输出当前主机名
awk ‘BEGIN {“hostname” | getline ; print $0}’
查看网卡流量
ifconfig ens33 |awk '/RX p/{print $5 "字节"}'
扩充
echo -e "\033[31m 哈哈 \033[0m"
|