Linux三剑客 grepawkseed
Posted _蒲公英_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客 grepawkseed相关的知识,希望对你有一定的参考价值。
简介
grep:适合单纯的查找或匹配文本
sed:适合编辑文本
awk:适合格式化文本,对文本进行复杂的格式化处理
1.grep
grep -help
【options】
-c:只输出匹配行的计数
-i:不区分大小写
-h:查询多文件是不显示文件名
-l:查询多文件时只输出包含匹配字符的文件名
-m:显示匹配行及行号
-s:不显示不存在或无匹配文本的错误信息
-v:显示不包含匹配文本的所有行
-color=auto:可以将找到的关键词部分加上颜色的显示
【pattern】正则参数含义
\\:忽略正则表达式中特殊字符的原有含义
^:匹配正则表达式的开始
$:匹配正则表达式的结束
\\<:从匹配正则表达式的行开始
\\>:到正则表达式的行结束
[]:单个字符ex:[a]即a符合
[-]:范围ex:[a-c],即a,b,c符合
.:所有单个字符
*:有字符,长度可以为0
【简单使用】匹配的是当前文件夹下
grep ‘test’ d* 显示所有以d开头的文件中包含test的行
grep ‘test’ aa bb cc 显示在aa,bb,cc文件中匹配test的行
grep ‘[a-z]\\{5\\}’ aa 显示在aa文件中所有包含每个字符串至少有连续5个小写字符的字符串的行
grep \'w\\(es\\)t.8\\1\' aa 如果west被匹配,则es存储到内存中,并标记为1,然后搜索任一个字符(.*)这些字符后面紧跟着es(\\1),找到就显示该行
egrep或grep -E 不需要使用\'\\\'进行转义
【复杂实例】
grep -r :搜索子目录
grep -d skip :忽略子目录
2.sed
利用脚本来处理文本文件
可依照脚本的指令来处理、编辑文本文件
主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
【参数说明】
-e<script>或-expression=<script> 以选项中中指定的script来处理输入文本文件 只是在终端显示
-i<script>或-expression=<script> 以选项中中指定的script来处理输入文本文件 修改源文件
-f<script文件>或-file=<script文件>以选项中指定的script文件来处理输入的文本文件
-h或-help 显示帮助
-n或-quiet或-silent仅显示cript处理后的结果
-v或-version显示版本信息
【动作说明】
a:新增 a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c:取代,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行
d:删除, d通常后面不接任何内容
i:插入,i后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p:打印,将某个选择的数据打印,通常与参数sed -n 一起运行
s:取代,可以直接进行取代的工作,通常这个s的动作可以搭配正则表达式。ex:1,20s/old/new/g
【实例】
sed -e 4a\\newLine testfile 第四行添加新的字符串
nl /etc/passwd | sed \'2i drink tea\' passwd显示行号输出并在第2行前插入drink tea
nl /etc/passwd | sed \'2,5c No 2-5 number\' passwd显示行号输出并将2~5行内容替换成 No 2-5 number
sed \'s/is/are/g\' testfile 将is换成are
sed \'1,3d\' testfile 删除前三行
sed \'\'\\%pig%d" testfile 删除包含pig的行
sed "/^$/d" testfile 删除空白行
sed -n \'5,10p\' testfile 显示5~10行
3.awk
awk是一种处理文本文件的语言,是一个强大的分析工具
-F fs or --field-separator fs:指定输入文件拆分分隔符 fs是一个字符串或者是一个正则表达式,ex:-F:
-v var=value or --asgin var=value 赋值一个用户定义变量
-f scriptfile or --file scriptfile 从脚本文件中读取命令
-mf nnn and -mr nnn 对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目 -mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展,在标准awk中不适用
【用法1】
awk ‘{[pattern] action}’ {filenames} 行号匹配语句 awk只能使用单引号
【实例】每行按空格或tab分割
awk \'{print $1,$4}\' log.txt 输出文本中每行的1,4项
awk \'length>8\' log.txt 文件中找出大于8的行
【用法2】
awk -F 相当于内置变量 FS,指定分隔符
【实例】
awk -F, \'print{$1,$2} log.txt 使用\',\'分割
awk -F\'[ ,]\' \'{print $1,$2,$5}\' log.txt 使用多个分隔符,先使用空格分割,然后对分割结果在使用‘,’分割
【用法3】
awk -v 设置变量
【实例】
awk -va=1 ‘{print $1, $1+a}’ log.txt 设置变量a并赋值为1,打印第一列和第一列加变量a的值
awk -va=1 -vb=2 \'{print $1,$1+a,$1b}\' 设置两个变量ab并赋值,打印第一列,第一列加a,第一列拼接b
【用法4】
awk -f {awk 脚本} {文件名}
【实例】
awk -f cal.awk log.txt 动作写入cal.awk中 执行脚本使用
【运算符】
【实例】
#过滤第一列大于2的行
$ awk \'$1>2\' log.txt
#过滤第一列等于2的行
$ awk \'$1==2 {print $1,$3}\' log.txt
【内置变量】
【实例】
$ awk \'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}\' log.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS---------------------------------------------
log.txt 2 1 5 1
log.txt 2 2 5 2
log.txt 2 3 3 3
log.txt 2 4 4 4
$ awk -F\\\' \'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}\' log.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS---------------------------------------------
log.txt 2 1 \' 1 1
log.txt 2 2 \' 1 2
log.txt 2 3 \' 2 3
log.txt 2 4 \' 1 4# 输出顺序号 NR, 匹配文本行号
以上是关于Linux三剑客 grepawkseed的主要内容,如果未能解决你的问题,请参考以下文章