总结Linux中用于文本处理的awk、sed、grep命令用法
awk基础概念Awk把文件(或其他方式的输入流, 如重定向输入)看作一个记录集, 把每一行看作一条记录, 把每一行中以空格(或\\t,或用户自己指定的分隔符)分割的字符串看作一个字段. 这似乎把文件记录看成数据库. 但是, awk仍然以行为单位逐行处理. 本例子以下面的文件(命名为s.txt)内容做演示:
代码如下:
一行中的5个字段分辨表示姓名, 出生年, 性别,科目,分数, 是一个很传统很典型的报表文件.Awk基本语法: awk ‘pattern1 {command1;command 2…; command 3}pattern2 { command …}’pattern表示用来过滤记录的模式, 可是是正则表达式, 关系运算表达式, 也可以什么也没有(表示选中所有记录);每个pattern选中的行记录会被花括号括起来的命令command操作一遍, command之间用;分割. 花括号里面可以什么也没有, 则默认为print输出整行记录. Comamnd可以是输出, 可以是算术运算, 逻辑运算, 循环控制等等.先看几个例子, 以建立对awk的命令直观的了解.
代码如下:
结果:本例有3个花括号,分别对应3个模式, BEGIN和END是特殊模式,分别作用在记录开始前和记录结束后.变量: 上面说到command可以是算术运算, 所及运算等, 则既然有运算, 就有常量变量, awk可以自定义变量(不需要提前声明, 但最好在BEGIN里面给它初始化). Awk也维护了一组程序变量:
变量 |
说明 |
$0 |
当前记录; |
$1, $2, … $n |
当前记录的字段 |
FILENAME |
当前的文件名 |
FS |
输入字段的分隔符, 可通过-F修改. 如: 先通过sed把空格替换为|,然后管道输送给awk:sed \’s/ /|/g\’ s.txt | awk -F \’|\’ \’/chinese/{print FILENAME, $1, $5}\’ |
NF |
当前记录的字段数 |
NR |
当前记录编号 |
OFS |
输出字段分隔符 |
ORS |
输出记录分隔符 |
RS |
记录分隔符, 默认为换行符 |
给一些例子来说明这些变量的用法:
代码如下:
sedsed \’2,5d\’ file 显示文件file,除去2-5行,但行数超过文件实际行数时不会报错。sed \’/10[1-4]/d\’ file 显示文件file,除去包含101-104的行。sed \’2,$d\’ file 显示文件,只显示第一行。sed \’2,$!d\’ file则只显示除第一行外的其它行。sed \’/^ *$/d file 删除文件中的空行。sed -n \’/10[1-4]/p\’ file 只显示文件file中包含101-104的行。(n和p必须同时使用,否则只有p时显示全部文件并多显示一次找到的行)sed -n \’5p\’ file 只显示文件的第5行sed \’s/moding/moden/g\’ file 将moding替换为modensed -n \’s/^west/north/p\’ file 将west开头的行替换为north并显示出来。sed \’s/[0-9][0-9][0-9]$/&.5/\’ file 将file文件中以3个数字结尾的行替换为原数字加".5",&代表搜索到的字符串。sed \’s/moding/\\1en/g file 将mod做为模式1封装在括号里,然后替换。sed \’s/…$//\’ file 删除每一行的最后三个字符。sed \’s/^…//\’ file 删除每一行的头三个字符。sed \’s#moding#moden#g\’ file将moding替换为moden,s后面的#代表搜索串和替换串之间的分界符。sed -n \’/101/,/105/p\’ file 显示从101的匹配行到105的匹配行。如果只找到101的匹配行,则从101的匹配行到文件末。sed -n \’2,/999/p\’ file 显示从第2行到匹配行。sed\’/101/,/105/s/$/ 20050119/\’ file将从101的匹配行到105的匹配行的行末增加" 20050119"内容。sed -e \’1,3d\’ -e \’s/moding/moden/g\’file 先删除文件的1-3行,再进行替换。sed -e \’/^#/!d\’ file 显示文件以#开头的行。sed \’/101/r newfile\’ file 在每个匹配行增加文件newfile的内容sed \’/101/w newfile\’ file 把匹配行写入newfile。sed \’/101/a new text\’ file 在匹配行后增加一新行。sed \’/101/i\’ new text\’ file 在匹配行前增加一新行。sed \’/101/c new text\’ file 用新行替换匹配行。sed \’y/abcd/ABCD/\’ file 将a、b、c、d分别替换为ABCD。 sed \’5q\’ file 显示到第5行时退出。sed \’/101/{ n; s/moding/moden/g; }\’ file在文件中找到匹配行的后一行(n)再进行替换。sed \’/101/{ s/moding/moden/g; q; }\’ file在文件中找到第一个匹配行后进行替换后再退出。sed -e \’/101/{ h; d; }\’ -e \’/104/{ G; }\’file 在文件中找到与101匹配行后先存在一个缓存中,再放在与104匹配行后。sed -e \’/101/{ h; d; }\’ -e \’/104/{ g; }\’file 在文件中找到与101匹配行后先存在一个缓存中,再替代104的匹配行。sed -e \’/101/h\’ -e \’$G\’ file 将最后一个匹配行放在文件末。sed -e \’/101/h\’ -e \’$g\’ file 将最后一个匹配行替换文件末行。sed -e \’/101/h\’ -e \’/104/x\’ file 在文件中找到与101匹配行后先存在一个缓存中,再与104的匹配行进行互换。echo –ltr 1.txt | sed‘s/^.* //’ 找出文件名
grep常用的grep选项-c 只输出匹配行的计数。// 这条有时候很有用, 不需要再 | wc -l-i 不区分大小写(只适用于单字符)。-h 查询多文件时不显示文件名。-l 查询多文件时只输出包含匹配字符的文件名。-n 显示匹配行及行号。-s 不显示不存在或无匹配文本的错误信息。-v 显示不包含匹配文本的所有行。例子
代码如下:
显示不包含匹配文本的所有行
代码如下:
显示匹配行及行号
代码如下:
只输出匹配行的计数精确匹配:
代码如下:
代码如下:
忽略大小写多次过滤
代码如下:
补充说明,grep 家族还包括fgrep和egrep。fgrep是fix grep, 允许查找字符串而不是一个模式,运算速度快,适合于从大量数据中进行检索;egrep是扩展grep,支持基本及扩展的正则表达式,可用()及|等,但不支持q模式范围的应用及与之相对应的一些更加规范的模式。
代码如下:
代码如下:
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » 总结Linux中用于文本处理的awk、sed、grep命令用法
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 织梦模板使用说明
- 你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html