1,GREP
grep 是按行匹配,主要司责查询相关的操作
grep [option] [pattern] [file1,file2,file3,,,,]
some command | grep [option] [pattern
选项[OPTION] 含义
-i 忽略大小写
-c 只输出匹配行的数量
-n 显示行号
-r 递归搜索
实例,比如说要查找某个目录中的文件含有某个关键字的
grep -r keyword 目录
-E 支持扩展正则表达式
-w 匹配整个单词
-l 只列出匹配的文件名
-F 不支持正则,按字符串字面意思进行匹配
2,SED
对行进行处理
流编辑器,对文件逐行进行处理
两种形式
sed [option] "pattern command " file
come command | sed [option] "pattern command"
>> /dev/null 可以相当于是一个黑洞,在操作中遇到不想要的东西可以丢进去
&> /dev/null
option 选项
-n 只打印模式匹配的行
-f 加载存放动作的文件
-r 支持拓展正则
-i 直接修改文件
pattern 模式
如果添加就只针对添加的范围,不添加默认处理全局
匹配模式 含义
5 只处理5行
5,10 只处理第5行到第10行
/关键字/ 处理含有关键字的数据那行
/^A/,/^B/ 从A开头的一行到以B开头的一行
command 命令
查询
p 打印出来查询到的结果
新增
a 在匹配行后新增
i 在匹配行前新增
r 外部文件读入,行后新增
w 匹配行写入外部文件
删除
d
修改
s/old/new 只修改匹配行中第一个old进行修改
s/old/new/g 将所有的old进行修改
s/old/new/ig 忽略大小写并对所有old进行修改
sed -p 打印内容会打印两次,除了目标文件,也会将搜索结果一并打印出来
3,AWK
三剑客的核心,主要负责对列进行处理,可以当成是cut的进阶版,但是功能比cut强大的多。
awk甚至可以作为一门单独的语言来进行学习
文本处理工具,处理数据并生成结果报告。
两种形式
awk 'BEGIN{}pattern{commands}END{}' file
some command | grep [option][pattern]
格式 含义
BEGIN{} 处理数据之前执行的内容
pattern 匹配模式 进行设置的话,针对范围进行配置,
不设置则针对全部的数据进行处理
{commands} 处理命令
END{} 处理数字之后执行的内容
内置变量 含义
$0 整行内容
$1-$n 当前行的第1-n个字段
NF 当前行字段数 number field
NR 当前行行号,从1开始 number row
FS 输入字段分隔符,默认为空格或者tab键 field separator
OFS 输出字段分隔符,默认为空格
output field separator
ors 输出行分隔符,默认为回车符
output row separator
printf格式符
%s 字符串
%d 数字
%f 浮点数
修饰符
+ 右对齐
- 左对齐
默认为右对齐
awk 'BEGIN{FS=":"}{printf "%-20s%20s\n",$1,$NF }'
实例解释
执行之前先对字段分割符进行设定为 :
pattern设置为从第一列到最后一列
使用printf 进行字符串站位设置,
20s代表站多少个字节位
awk 'BEGIN{FS=":"}/mail/ {printf "%10s,%20s\n",$4,$5}' passwd
/mail/ 为pattern,可不写,不写默认处理全局,支持正则
可以写正则,可以写$0-4之类的取列,可以写运算 ==
$ awk 'BEGIN{FS=":"}{print $(NF-1)}' passwd
案例解释
执行之前先对字段分割符进行设定为 :
pattern未进行设置,默认为全局
打印 每行数据的倒数第一列
脚本编写实例
BEGIN{
FS=":"
printf "%-20s%-20s\n" ,"Username","shell"
}
{
if($6 == "/bin" )
{
count ++
printf "%-20s%-20s\n",$1,$NF
}
}
END{
printf "%-20s%-20s\n","Total",count
}
封装脚本
当awk命令过于长的时候,通常采取封装成脚本文件的方法来直接引用文件
执行文件内部的命令快的方法 具体封装方法如上
文件命名一般作为 命令的后缀名,awk,sed之类
语法中不在使用;进行分割,使用缩进进行分割
'''
执行的时候
awk -f 脚本名 待处理文件路径即可。