grep、sed、awk学习笔记

grep

作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,  打印匹配到的行。

模式:由正则表达式的 “元字符” 及 “文本字符” 所编写的 “过滤条件”

语法:

grep  [options]  [pattern]  file

命令  参数     匹配模式 文本数据

    

参数选项

解释说明

-v

排除匹配结果

-n

显示匹配行和行号

-i

ignorecase 忽略大小写

-c

只统计匹配的行数

-E

使用egrep命令

egrep 即grep -E

--color=auto

为grep过滤结果添加颜色

#我觉着可以在.cshrc 里面起个别名

# alias grep “grep --colorauto”

-w

只匹配过滤的单词

-o

只输出匹配的内容

-q, --quiet, --slient

静默模式,即不输出任何信息

sed

语法:

sed  [参数选项]   [sed 内置命令字符]    [输入文件]

参数选项:

-n :取消默认sed的输出,常与sed内置命令p一起使用 。只会打印符合规则的输出。不使用-n,会把所有的都输出

-i :直接将修改结果写入文件,不用 -i, sed修改的是内存数据

-e :多次编辑,不需要管道符了

-r :支持正则扩展

内置命令字符:

a :append, 对文本追加,在指定行后面添加行或多行文本和 i 命令相反

d :Delete,删除匹配行

i :insert,表示插入文本,在指定行前面添加一行或多行文本

p : Print,打印匹配行的内容,通常p和-n一起使用

s/正则/替换内容/g :匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配,也可以写作 s#正则#替换内容#g   s@正则@替换内容@g

sed 匹配范围:

范围

解释

空地址

全文处理

单地址

指定文件某一行

/pattern/

被模式匹配到的每一行

范围区间

10,20 十到二十,

10,+5 第10行向下5行,包括第十行到第15行

/pattern1/pattern2/

步长

1~2 表示从第一行开始,跨两个步长,1、3、5、7、9、奇数行

2~2 表示从第二行开始,跨两个步长,2、4、6、8、10、偶数行

例子:

sed -n 2,3p aaa.txt     #输出文件第2行3行内容, -n 取消默认输出。 p 打印

sed -n 2,+3p aaa.txt    #输出第2, 3,4,5行内容

sed -n /linux/p aaa.txt  #输出匹配到linux的行

sed  /game/d aaa.txt      #删除模式空间(即内存)中含有game 的行

sed -i /game/d aaa.txt      #删除含有game 的行,并直接写入文件

sed -i 5,$d aaa.txt         #删除第5行到结尾行,并直接写入文件中

sed -i s/My/You/g aaa.txt   #把文件中所有的My 替换成You,写回到文件中

sed -i -e s/You/My/g -e s/38383/1000/g aaa.txt   #把You换成My,把38383换成1000,并写回到文件中

sed  -i  2a My name is Tim aaa.txt  #在第二行后面追加一行 My name is Tim

sed -i 2i My name is Tim aaa.txt    #在第二行前面插入一行

sed -i 3a I love you \n I like you aaa.txt  #在第三行后面追加一行。并写回文件。但由于# \n 的存在实际是追加了两行

sed -i a #### aaa.txt        #由于a 后面没有跟数字,也就是指匹配范围的“空地址

#指代全局,会在每一行后面追加 ####

awk

awk语法

awk  [option]  pattern[action]  file …

          参数    ‘条件动作’   文件

Note:action值得是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print和printf

awk应用场景

awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符。

awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分隔符去工作,没有指定则默认空格。

制定了分隔符后,awk把每一行切割后的数据对应到内置变量

$0:代表一整行。

$1 :代表第一列

$2 :代表第二列

$NF :代表当前分割后的最后一列,倒数第二列可以写成$(NF-1)

awk的部分内置变量

$n                   : 指定分隔符后,当前记录的第n个字段。n代表数字

$0                   : 完整的输入记录

FS                   : 字段分隔符,默认是空格,也叫作输入分隔符

OFS                  : 输出分割符

RS                   : 输入记录分隔符(输入换行符),指定输入时的换行符

ORS                  :输出记录分隔符(输出换行符),输出是指定符号代替换行符

NF(Number of fields)    : 分割后,当前一共有多少个字段。每一行被切割成几段数目

NR(Number of records)  : 当前记录数,行数,表示行号

FNR                 :各个文件分别计数的行号

FILENAME            :当前文件名

ARGC                :

ARGV                : 表示一个数组,数组中保存的是命令行所给的参数。条件动作不在ARGV中

awk参数:

-F  :指定分隔符

-v : 定义或修改一个awk内部的变量

-f :从脚本文件中读取awk命令

例子:

awk {print $1$4$5} aaa.txt  #打印1、4、5列信息。但各个信息之间没有分隔符

awk {print $1,$4,$5} aaa.txt  #打印1、4、5列信息。各个信息之间以默认分隔符空格

#进行分割

自定义输出

awk必须外层单引号,内层双引号

例子

Awk {print 第一列:$1,“第二列:” $2} aaa.txt  #打印第一列,第二列内容,并在

#各自前面加上自定义的信息

awk {print} aaa.txt    #输出每一行信息

awk {print $0} aaa.txt  #输出每一行信息

awk 'NR==5{print $0}' aaa.txt   #print $0 打印每一行信息,NR==5,只取第5行。

awk 'NR==5, NR==6{print $0}' aaa.txt   #打印第5行,第6行

awk 'NR==3, NR==6' aaa.txt           #输出第3行到第6行全部内容

awk '{print NR, $0}' aaa.txt           #打印每一行,并打印出行号

awk 'NR==37,NR==40{print NR, $0}' aaa.txt   #打印出37~40行的内容,并加上行号

awk '{print $1, $(NF-1)}' aaa.txt   #打印出第一列和底数第二列

#输入分隔符(FS)和输出分隔符(OFS)

awk  -F ":"  '{print $1,$NF}' aaat.txt   #以冒号为分隔符打印第一列和最后一列

awk -v FS=":"  '{print $1,$NF}' aaat.txt  #以冒号为分隔符打印第一列和最后一列,注意 -v的#作用是把变量FS的值改变了

awk  -F ":"  -v OFS=“------” '{print $1,$NF}' aaat.txt   #打印第一列和第二列,读入数据时

#以冒号分割,打印到屏幕上时以

# ------ 分割

awk 'BEGIN{print "开始使用awk"} {print $0}' aaa.txt   #在执行动作之前先先打印一些信息

awk -v myname="TIM"  'BEGIN{print "我的名字是",myname}  #使用-v 定义变量,

#并传递变量

awk -v awk_name=$myname 'BEGIN{print awk_name}'  #获取shell 变量 $myname

awk中printf和print的区别

format的使用

要点:

  1. printf需要指定format
  2. format用于指定后面每个item的输出格式
  3. printf语句不会自动打印换行符

  format格式的指示符都以%开头,后跟一个字符:如下:

  %c  :显示字符的ASCII码

  %d,%i :十进制整数

  %e,%E:科学计数法显示数值

  %f :浮点数

  %g,%G : 以科学计数法的格式或浮点数的格式显示数值

  %s  : 字符串

  %u  : 无符号整数

  %%  : 显示%自身

  printf 修饰符

  -  : 左对齐,默认右对齐

  + : 显示数值符号

printf动作默认不会添加换行符

print默认添加空格换行符

awk模式pattern

BEGIN模式是处理文本之前需要执行的操作

END模式处理文本之后需要执行的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值