grep awk sed 过滤命令

grep 简介

  1. grep 是linux 中最常用的“文本处理工具之一
  2. 与sed awk 合称为linux中的三剑客!
  3. grep 就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,可以把grep 理解为字符查找工具
  4. grep 的全称为Global search Regular Expression and Print out the line 为全局搜索的意思

grep 基本用法

# grep [选项] 正则表达式 [目标文件]
grep [OPTIONS] PATTERN [FILE...]    
# grep [选项] -e 正则表表达式 或 -f 包含正则表表?

常用参数

  • -v:反向查找,显示没有匹配模式的行

  • -n:显示匹配结果所在行号

  • -i: 在搜索的时候忽略大小写

  • -o:只显示符合条件的字符串

  • -e:实现多个选项的匹配,逻辑or关系

  • -E:使用扩展正则表达式,在使用 “-E” 选项时,相当于使用 egrep

  • -w:精确匹配关键字

  • -c:统计匹配到的行数,注意,是匹配到的总行数

  • -q: 静默模式,不输出任何信息

  • -l: 不显示输出的匹配结果,仅显示匹配的文件名

  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。

  • b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。

sed 简介

流编辑器,主要用来过滤和替换文本内容

工作原理:

  1. sed是流编辑器,不允许用户与它进行交互操作.sed是以行为单位处理文本内容的.每一次读取一行到内存中,即称之为模式空间(pattern space)
  2. 默认不修改原文件,如果需要修改需加-i参数
  3. sed有模式空间及保持空间(hold sapce),默认打印模式空间中的内容到标准输出
  4. sed读取每行的时候会将内容保存至内存中
  5. 支持正则和扩展正则表达式,除-y选项

sed 基本用法

sed [选项] '定址和命令' 处理的文件 

常用的选项

  • -i:将修改直接作用
  • -n:取消默认输出

常用的参数

  • p:打印

  • d:删除

  • s:替换(字符串被替换) g:全局模式,所有匹配的字符串都被替换(不加g默认只替换每行匹配的第一个)

  • y:变换字符(一一对应)

  • i:插入(匹配行前)

  • a:追加(匹配行后)

  • c:修改(匹配到的整行被修改)

  • r:从文件读入

  • w:写入文件

  • q:找到第一个匹配就退出

awk 简介

  1. awk 是一个优良的文本处理工具。(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)

  2. 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令

awk基本用法

-F 指定分隔符为冒号

语法格式:

awk  -F  '分隔符'  '/模式/{操作}'   文件名

awk内置变量

属性  		说明
$0  	当前记录(作为单个变量)
$1~$n   当前记录的第n个字段,字段间由FS分隔
FS 		输入字段分隔符 默认是空格
NF 		当前记录中的字段个数,就是有多少列
NR  	已经读出的记录数,就是行号,从1开始
RS  	输入的记录他隔符默 认为换行符
OFS     输出字段分隔符 默认也是空格
ORS     输出的记录分隔符,默认为换行符
ARGC    命令行参数个数
ARGV    命令行参数数组
FILENAME    当前输入文件的名字
IGNORECASE  如果为真,则进行忽略大小写的匹配
ARGIND  	当前被处理文件的ARGV标志符
CONVFMT     数字转换格式 %.6g
ENVIRON     UNIX环境变量
ERRNO   	UNIX系统错误消息
FIELDWIDTHS     输入字段宽度的空白分隔字符串
FNR    		 当前记录数
OFMT    	数字的输出格式 %.6g
RSTART  	被匹配函数匹配的字符串首
RLENGTH     被匹配函数匹配的字符串长度

awk常用变量

  • NF:表示最后一个字段
[root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
  • $(NF-1):表示倒数第二个字段
[root@localhost ~]# awk -F ':' '{print $(NF-1)}' /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
  • NR:表示当前处理的是第几行
输出第二行
[root@localhost ~]# awk -F ":" 'NR==2 {print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
三行以后
[root@localhost ~]# awk -F ':' 'NR>3 {print}' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

awk内置函数

  • toupper()用于将字符转为大写【t^ber】
[root@localhost ~]# awk -F ':' '{print toupper($1)}' /etc/passwd
ROOT
BIN
DAEMON
ADM
LP
  • tolower()用于将字符串转为小写
[root@localhost ~]# awk '{print tolower($1)}' /tmp/aa.txt
root
bin
daemon
adm

awk if else语句

  • 假如$1==root 打印第一个字段,否则打印第二个字段
root@localhost ~]# awk -F : '{if ($1=="root") print $1;else print $2}' /etc/passwd
root
x
x
x
x

awk 高级用法BEGIN END

awk '
BEGIN { actions }
/pattern/ { actions }
/pattern/ { actions }
……….
END { actions }
' filenames 
  • BEGIN 模式:是指 awk 将在读取任何输入行之前立即执行 BEGIN 中指定的动作。
  • END 模式:是指 awk 将在它正式退出前执行 END 中指定的动作
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值