1、grep 常用用法总结
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep常用的用法
格式 grep [-acinv] [–color=auto] ‘搜索字符串’ filename
选项和参数:
- -a 将二进制文件以文本方式搜索数据
- -c 计算找到 ”搜寻字符串“ 的次数
- -i 忽略大小写
- -n 顺便输出行号
- -v 反向选择,显示没有 ”搜寻字符串“ 内容的那一行
- –color=auto 可以将找到的关键词部分加上颜色的显示。
- grep windos /etc/passwd
显示passwd文件中包含windos内容的行 - grep -n windos /etc/passwd
显示passwd文件中包含windos内容的行,同时显示行号 - grep -n ‘t[ae]st’ data.txt
正则表达式的配合使用:如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 ‘t?st’ 存在~这个时候,用t[ae]st匹配,及需要搜索[tast] [test]两个字符串。 - grep -n ‘[^a-z]oo’ data.txt
正则匹配显示oo前面不包含小写字母的所有内容,同时显示行
例如 3:Football game - grep -n ‘1’ data.txt
正则匹配显示一小写字母开头的内容 - grep -n ‘[a-zA-Z]’ data.txt
正则匹配显示不以小写字母或者大写字母(不以英文字母)开头的文本,同时显示行号。 - grep -n ‘.$’ data.txt
显示data 文件中行尾为小数点的那一行,同时显示行号。 - grep -n '^$ data.txt
显示只有行首行尾,也就是显示空白行,同时显示行号
awk 常用用法总结
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
-
使用方法
格式:awk ‘{pattern + action}’ {filenames}
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
-
调用方式
- 命令行方式
awk [-F field-separator] ‘commands’ input-file(s)
commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
-
shell脚本方式
类似#!/bin/sh ===> #!bin/awk
-
将所有的awk命令插入一个单独的文件
- awk的内置变量
变量名称 | 功能 |
---|---|
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
FILENAME | awk浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符,等价于命令行 |
NF | 浏览记录的域的个数 |
NR | 已读的记录数 |
OFS | 输出域分隔符 |
ORS | 输出记录分割符 |
RS | 控制记录分割符 |
- 举一反三
- cat /etc/passwd | awk -F ‘:’ ‘{print $1}’
表示以:分割passwd文件每行内容,显示第一列
- cat /etc/passwd | awk -F ‘:’ ‘{print $1"\t"$7}’
表示以: 分割passwd文件每行内容,同时显示第一列和第7列,两列之间用tab键分割。
- cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name1,shell1”} {print $1","$7} END {print “red,/bin/bash”}’
表示先执行BEGIN命令,然后读取文件,读入有/n 换行符的一条记录,然后根据记录按: 分割符划分该行,$0表示所有域,$1表示第一个域(列),读完所有的行,分割后,执行END操作,追加打印”red,/bin/bash“。 - awk -F ‘:’ ‘/windos/’ /etc/passwd
模式匹配方式,在passwd文件中查找windos关键字所有的行。
- awk -F: ‘/root/{print $7}’ /etc/passwd
模式匹配方式,在passwd文件中查找root关键字所在的行同时显示第7个域(列)
- #awk -F ‘:’ ‘{print “filename:” FILENAME “,linenumber:” NR “,columns:” NF “,linecontent:”$0}’ /etc/passwd
统计/etc/passwd 格式: 文件名,每行的行号,每行的列数。
- awk -F ‘:’ ‘{printf(“filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n”,FILENAME,NR,NF,$0)}’ /etc/passwd
效果同上。
a-z ↩︎