【Shell】grep sed awk

9 篇文章 0 订阅
4 篇文章 0 订阅

grep [options]  PATTERN

  • -i:忽略大小写
  • --color:匹配到的字符用其他颜色显示出来
  • -v:显示没有匹配到的行
  • -o:只显示被模式匹配到的字符串,不显示行
  • -A n:显示该行及其后n行
  • -B n:显示该行及其前n行
  • -C n:显示该行及其前后各n行


sed 用来把文档或字符串里的文字经过一系列编辑命令转换为另一种格式输出

sed [-nefr] ‘行数 动作 文件

  • -n:静默欧式,不再显示空间中的内容
  • -i:直接修改源文件
  • -e SCRIPT:执行脚本
  • -r:使用扩展正则表达式

行数:

  • startline,endline:开始行,结束行
  • /RegExp/:扩展正则表达式
  • /pattern1/,/pattern2/:从第一次匹配parttern1行开始,到第一次匹配到pattern2行结束
  • linenumber
  • startline,+N:从startline开始,向后N行结束

动作:

  • p:显示符合条件的行(不适用-n被匹配到的行会显示两遍,sed会把处理的信息输出)
  • a xxx:新增,在指定的行后面追加新行,内容为“xxx”(下一行)
  • c xxx:替换,在c后面可以接字符串
  • d:删除,删除符合条件的行
  • i  xxx:插入,在指定的行前面追加新行,内容为“xxx”(上一行)
  • r  file:将指定的文件内容添加到符合条件的文件中
  • w file:将地址指定范围的行另存至指定的文件中
  • s /被替换字符/替换字符/[i/g]:查找并替换,默认只替换每行中第一次被模式匹配到的字符

g:全局替换     i:忽略字符大小写

# Read from the file file.txt and output the tenth line to stdout.
cat file.txt | sed -n '10p'
nl wc.txt | sed '2i zhang'

nl wc.txt | sed '2s/hello/bonjour/i'


awk提供了强大的功能:正则表达式、样式装入、流控制、数学运算符、进程控制语句、内置变量函数。

awk [options] 'script' file1,file2,......

awk [options] 'PATTERN{action}' file1,file2,......

awk内置记录变量

  • FS字段分隔符,默认是空白字符
  • RS:记录分隔符,默认是换行符
  • OPF:字段分隔符
  • OPS行分隔符

awk 'BEGIN{OFS=","}{print $1,$2}' wc.txt

awk内置数据变量

  • NRawk命令所处理的记录行数(可能有多个)
  • NF:当前记录的字段数
  • FNR:当前处理文件的行数
  • ARGV:数组,保存命令行本身的字符串
  • ARGC:awk命令的参数个数
  • FILENAME:正在处理的文件名称
  • ENVIRON:当前shell环境变量及其关联数组

awk 'BEGIN{print ENVIRON["PATH"]}'

print

print item1,item2,......
  1. 各项目使用逗号隔开,输出时以空白字符分隔
  2. 输出可以为字符串、数值、当前记录的字段、变量、或awk表达式
  3. item可以忽略,相当于print $0

printf

printf format item1,item2,......

与print不同,printf需要指定格式(item输出格式)

格式:

  • %c:字符的ASCII码
  • %d,%i:十进制整数
  • %e,%E:科学计数法显示数值
  • %f:显示浮点数
  • %g,%G:以科学计数法格式或浮点数格式显示数值
  • %s:显示字符串
  • %u:无符号整数
  • %%:显示%自身

awk处理流程:

(1) 读入第一行,并将第一行的数据填入到$0,$1,$2等变量当中

(2) 依据条件类型限制,判断是否需要进行后面的操作

(3) 做完所有动作和条件类型

(4) 继续后续行的处理......

每一行的每个变量都是有变量名称的,$1,$2,$3......($1表示第一列,$0表示一整行)

last -n 5 | awk '{print $1,$3}'

last -n 5 | awk '{print $1,NR,NF}'

--------------------------------------------------------------------------------------------------------

字符串统计:

cat wc.txt |  
sed 's/[,.:;/!?]/ /g' |  
awk '{for(i=1;i<NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值