grep 简介
- grep 是linux 中最常用的“文本处理工具之一
- 与sed awk 合称为linux中的三剑客!
- grep 就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,可以把grep 理解为字符查找工具
- 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 简介
流编辑器,主要用来过滤和替换文本内容
工作原理:
- sed是流编辑器,不允许用户与它进行交互操作.sed是以行为单位处理文本内容的.每一次读取一行到内存中,即称之为模式空间(pattern space)
- 默认不修改原文件,如果需要修改需加-i参数
- sed有模式空间及保持空间(hold sapce),默认打印模式空间中的内容到标准输出
- sed读取每行的时候会将内容保存至内存中
- 支持正则和扩展正则表达式,除-y选项
sed 基本用法
sed [选项] '定址和命令' 处理的文件
常用的选项
- -i:将修改直接作用
- -n:取消默认输出
常用的参数
- p:打印
- d:删除
- s:替换(字符串被替换) g:全局模式,所有匹配的字符串都被替换(不加g默认只替换每行匹配的第一个)
- y:变换字符(一一对应)
- i:插入(匹配行前)
- a:追加(匹配行后)
- c:修改(匹配到的整行被修改)
- r:从文件读入
- w:写入文件
- q:找到第一个匹配就退出
awk 简介
- awk 是一个优良的文本处理工具。(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)
- 其中 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 中指定的动作