Linux--shell脚本之文本处理工具
文本处理工具--grep、sed、awk
Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配。
而grep又有助于理解sed和awk。
1、grep
Linux系统中grep命令是一种强大的文本搜索、查找过滤工具,,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全
称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep格式:grep [选项] [模式] [文件...],它在一个或多个文件中搜索满足模式的文本行。
常用的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
eg:(在前一篇正则表达式中已经写到了,这里偷个懒,把昨天的图用一下吧)
2、sed
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed
的输入,经过一系列编辑命令转换为另一种格式输出。 sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相
同的。
sed命令行的基本格式为:
sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 ...
sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以多次传入多个文件,sed会依次处理。 sed
的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定,编辑命令的格式为:
/pattern/action
其中pattern是正则表达式,action是编辑操作。 sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执行相应的action,
如果一条命令没有pattern而只有action,这个action将作用于待处理文件的每一行。
sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的行。
命令
a\ : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ :用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每⾏末尾需用”\"续行
i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\"续行删除行
h : 把模式空间里的内容复制到暂存缓冲区
H : 把模式空间里的内容追加到暂存缓冲区
g : 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G: 把暂存缓冲区的内容追加到模式空间⾥,追加在原有内容的后面
l : 列出非打印字符
p : 打印行
q : 结束或退出sed
r : 从文件中读取输入行
! : 对所选行以外的所有行应用命令
s : 用一个字符串替换另一个
g : 在行内进行全局替换
w : 将所选的行写入文件
x : 交换暂存缓冲区与模式空间的内容
y : 将字符替换为另一字符(不能对正则表达式使用y命令)
选项
-e : 进行多项编辑,即对输入行应用多条sed命令时使用
-n : 取消默认的输出
-f :指定sed脚本的文件名
3、awk
sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。 awk缺省的行分隔符是换行,缺
省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有干个字段,字段之间以:分
隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。 awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和
循环结构,但是基本语法和sed类似,awk命令行的基本形式为:
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...
和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以
用-f参数指定一个脚本文件,编辑命令的格式为:
/pattern/{actions}
和sed类似,pattern是正则表达式,actions是一系列操作。 awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满
足condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
eg:
注:
$0:表示当前行
$1:表示当前行的第一列
$2:表示当前行的第二列
Linux--shell脚本之文本处理工具的更多相关文章
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- 老李分享:《Linux Shell脚本攻略》 要点(四)
老李分享:<Linux Shell脚本攻略> 要点(四) 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2. ...
- 老李分享:《Linux Shell脚本攻略》 要点(二)
老李分享:<Linux Shell脚本攻略> 要点(二) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课 ...
- 读《Linux Shell脚本攻略》(第2版) 总结
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...
- 读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 第一遍体会解读:就像黑夜中的灯塔,指明前进的道路. 推荐指数:强烈推荐. 书中讲解的 ...
- LINUX SHELL脚本攻略笔记[速查]
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- Linux Shell脚本攻略
-Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...
- linux ——shell 脚本
linux—shell 脚本 精简基础 2018/10/30 13 ...
- shell脚本--显示文本内容
shell脚本显示文本内容及相关的常用命令有cat.more.less.head.tail.nl 首先是cat,cat最常用的就是一次性显示文件的所有内容,如果一个文件的内容很多的话,那么就不是很方便 ...
随机推荐
- KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-handlebars
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- C++primer拾遗(第一章:开始)
本系列将总结正在阅读的C++primer这本书中值得注意又容易忘记的知识点. 1. 当return语句包括一个值时,次返回值的类型必须与函数返回类型相同. 2. 操纵符 endl.写入该符号的效果是: ...
- 队列工厂之RabbitMQ
本次和大家分享的是RabbitMQ队列的用法,前一篇文章队列工厂之(MSMQ)中在描述的时候已经搭建了简单工厂,因此本章内容是在其之上扩充的子项不再过多讲解工厂的代码了:RabbitMQ应该是现在互联 ...
- vector 对象中存放指针类型数据
<<C++ Primer>> 第四版Exercise Section 5.6 的5.1.6 有一道题是这样的:编写程序定义一个vector对象,其每个元素都是指向string类 ...
- solr query的post方式
众所周知, solr 是通过 GET 方式来进行查询的. 那么solr 是否支持POST 方式进行查询呢? 通过一番调研,发现SOLR其实是支持POST方式进行查询的. 方式为: 使用form 方式提 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十二)阶段总结
不知不觉,已经到了基础篇的收尾阶段了,看着前面的十几篇文章,真的有点不敢相信,自己竟然真的坚持了下来,虽然过程中也有过懒散和焦虑,不过结果还是自己所希望的,克服了很多的问题,将自己的作品展现出来,也发 ...
- Linux centos7环境下安装Nginx
Linux centos7环境下安装Nginx的步骤详解 1. 首先到Nginx官网下载Nginx安装包 http://nginx.org/download/nginx-1.5.9.tar.gz ...
- Web 页面测试总结—控件类
web端页面测试,最常见的是基本控件的测试,只有了解常见的控件和其测试方法,才能掌握测试要点,避免漏测情况发生.根据日常工作总结,将控件和常见逻辑集合在一起,总结了几个控件类测试查场景如下. 导航条 ...
- 深度学习实践系列(1)- 从零搭建notMNIST逻辑回归模型
MNIST 被喻为深度学习中的Hello World示例,由Yann LeCun等大神组织收集的一个手写数字的数据集,有60000个训练集和10000个验证集,是个非常适合初学者入门的训练集.这个网站 ...
- struct和typedef struct在c语言中的用法
在c语言中,定义一个结构体要用typedef ,例如下面的示例代码,Stack sq:中的Stack就是struct Stack的别名. 如果没有用到typedef,例如定义 struct test1 ...