grep、sed、awk基本用法汇总:
grep(全局正则表达式版本)
允许对文本文件进行模式查找;如果找到匹配模式,grep打印包含模式的所有行。
例: grep “abc” file 查找file文件中包含”abc”的所有字符串,并打印出来
常用的grep选项有:
-c 只输出匹配行的计数
-i 不区分大小写(只适用于单字符)
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行及行号
-s 不显示不存在或无匹配文本的错误信息
-v 显示不包含匹配文本的所有行
sed
1、基本sed编程:
1)插入文本
2)修改文本
3)删除文本
sed “1d” file 删除file文件中第一行
sed “1,3d” file 删除第一到第三行
sed “$d” file 删除最后一行
sed “/Name/d” file 删除包含文本 “Name” 的行
4)替换文本
替换命令用替换模式替换指定模式,格式为:
sed s/ pattern–to–find / replacement–pattern / [g p w n]
s选项通知sed这是一个替换操作,查询pattern–to–find,成功后用replacement – pattern替换它
替换选项如下:
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式
p 缺省sed将所有被替换行写入标准输出,加p选项将使-n选项无效。-n选项不打印输出结果
w 文件名 使用此选项将输出定向到一个文件
例:sed “s/abc/bcd/w sed.out“ file (将abc替换为bcd的替换结果写入文件sed.out)
2、使用替换修改字符串 :
如果要附加或修改一个字符串,可以使用&命令,&命令保存发现模式以便重新调用它,然后把它放在替换字符串里面。
例:sed –n “s/abc/”bcd” &/p” file
3、将sed结果写入文件命令
sed “1, 2 w filedt” file 文件file输出到屏幕,第1、2行输出文件filedt
4、从文件中读文本
处理文件时,sed允许从另一个文件中读文件,并将其文本附加在当前文件。此命令放在模式匹配行后,格式:
例:sed “/company./r file1” file
将file1文件内容附加到file文件中,是在模式匹配行/company./后放置附加文本。
awk
在命令调用awk时,awk脚本由各种操作和模式组成。
如果设置了 –F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域;但如果未设置 –F选项,awk则以空格未域分隔符。
1、域和记录
awk执行时,浏览域标记为$1,$2…$n(表示参照第1,…第n域),而$0,表示所有域
为打印一个域或所有域,使用print命令,这是一个awk动作。
1) 保存awk输出
有两种方式保存shell提示符下awk脚本的输出
第1种方法:重定向
例:$ awk “{print $0}” file1 > file
将文件file1内容直接输出到文件file中,但不输出到屏幕
第二种方法:使用tee命令
例:$ awk “{print $0}” file1 | tee file 输出重定向到文件file,同时输出到屏幕
2) 打印报告头
例:$ awk ‘begin {print “Name Belt\n----------”}’ {print $1 ”\t “ $4} file
2、条件操作符
1)匹配
为使一域号匹配正则表达式,使用符合‘~’后紧跟正则表达式,也可以用 if语句,awk中if后面的条件用()括起来。
例:$ awk “{if($4~/Brown/) print $0}” file
也可以简化为:$ awk “$0 ~ /Brown/” file
打印文件file第4域包含Brown的匹配记录行
2) 精确匹配 (使用等号 ==)
例:$ awk ‘$4==”Brown-3” {print $0}’ file
打印文件file第4域等于Brown-3的匹配记录行
3) 不匹配 (使用!~)
例:$ awk “$0 !~ /Brown/” file