https://blog.csdn.net/sj349781478/article/details/82930982
grep、awk、sed大概介绍
- grep 基于正则表达式查找满足条件的内容
- awk 报告生成器,格式化文本输出
- sed 修改数据
grep
grep [OPTIONS] PATTERN [FILE...]
参数
-o 仅显示匹配到的字符串
-E 使用ERE,相当于egrep
--color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-F 相当于fgrep,不支持正则表达式
/ 请无视
/ echo 12345 | grep 2
12345
/ echo 12345 | grep -o 2
2
/ echo 12341234 | grep -oE '.*?3'
123
4123
正则表达式
- 或
/ echo hello world hiiii| grep -oE "hello|hi"
hello
hi
- [ ] 匹配在[ ] 中的任意一个字符
/ echo asd | grep -E "[a]"
asd
- [^ ] 匹配内容不能有[ ] 中任意一个字符
/ echo asd | grep -oE "[^a]"
s
d
awk
awk [options] 'program' file…
1、program:pattern{action statements;..}
- pattern部分决定动作语句何时触发及触发事件
BEGIN,END - action statements对数据进行处理,放在{}内指明
print, printf
2、选项:
- -F 指明输入时用到的字段分隔符
- -v var=value 自定义变量
3、分割符、域和记录
- awk执行时,由分隔符分隔的字段(域)标记1,1,2..n称为域标识,n称为域标识,0为所有域。
- 省略action,则默认执行 print $0 的操作。
echo 7,8,9 | awk -F, '{print $2}'
8
8
4、变量
FS:输入字段分隔符(分割列);OFS:输出字段分隔符();RS:输入记录分隔符(分割行);ORS:输出记录分隔符;NF:字段数量;NR:记录号;
NFR:各文件分别计数,记录号。FILENAME:当前文件名;ARGC:命令行的参数;ARGV:数组,保存的是命令行所给定的各参数。
**** ps | awk '{print $0}'
PID TTY TIME CMD
79791 ttys000 0:00.09 ssh 11***4@shell.***-***.com
44956 ttys001 0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp apple
44958 ttys001 0:10.59 -zsh
****ps | awk '{print $2}'
TTY
ttys000
ttys001
ttys001
- NF字段数
**** ps | awk '{print $NF}' #由前面可知一行有4列,所以这里等价于 $4
CMD
11***@shell.****-****.com
apple
****ps | awk 'NR>1{print $(NF-1)}'
ssh
-fp
- FS 分割列
**** echo 2/3/4 | awk 'BEGIN{FS="/"}{print $1}'
2 #以 / 做分割
**** echo 2/3/4 | awk 'BEGIN{print $1}'
#取不到,2/3/4被视为一个整体,没有分割
- RS分割行
**** echo 2/3/4 | awk 'BEGIN{RS="/"}{print $0}' #以 / 作为行的分割标志
2
3
4
- ORS输出分隔符
[*****@izuefockpz ~]$ echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
/usr/local/bin
/usr/bin
/usr/local/sbin
/usr/sbin
[****@izuefockpz ~]$ echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS="\n";ORS=":"}{print $0}'
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
4、awk控制语句
- { statements;… } 组合语句
- if(condition) {statements;…}
- if(condition) {statements;…} else {statements;…}
- while(conditon) {statments;…}
- do {statements;…} while(condition)
- for(expr1;expr2;expr3) {statements;…}
sed
sed [option]... 'script' inputfile
1、选项
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
-i 直接编辑文件
-i.bak 备份文件并原处编辑
2、script 地址定界
不给地址:对全文进行处理
单地址:
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
地址范围:
#,#
#,+#
/pat1/,/pat2/
`#,/pat1/
~:步进
1~2 奇数行
2~2 偶数行
3、编辑命令:
d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a []text1 在指定行后面追加文本,支持使用\n实现多行追加
i []text 在行前面插入文本
c []text 替换行为单行或多行文本
w /path/somefile 保存模式匹配的行至指定文件
r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###
**** echo hello world | sed 's#hello#AAAA#'
AAAA world
4、替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
网友评论