shell文本处理工具总结
shell文本处理工具总结
为了效率,应该熟练的掌握自动化处理相关的知识和技能,能力就表现在做同样的一件事情,可以做的很好的同时,耗时还很短。
再次总结shell文本处理的相关规则,对提高软件调试效率,加快数据处理分析都很有帮助。
Shell常用的文本处理工具,主要是4种:sed,grep,gawk,正则表达式。
1. sed
这是一种流式编辑器,区别于普通的交互式编辑器的地方是在处理文本前,需要提前设定好一组规则,它会每次读取一行,按照规则匹配输出,循环往复,直到处理完毕为止;
命令格式为: sed options script file,
具体如下: sed [-Ealn] command [file ...] sed [-Ealn] [-e command] [-f command_file] [-i extension] [file ...]
常用的处理命令有:
sed -e 'cmd1; cmd2; cmd3 ... ;cmdn' file , 连续执行多个命令;
sed -n, 不要自动为每个命令生成输出;
sed 's/a/b/' file, 将file里面的a换成b;
sed '/pattern/d' file, 将file里面匹配pattern的行删除;
sed '/pattern/{n;d}' file,将file里面匹配pattern的行找到,将其下一行删除;
sed '/pattern/{N; s/a/b/}' file, N选项会使得文本行仍然用换行符处理,但是会合并当成一行处理,所以这里的意思是将file里面匹配pattern的行找到,将下一行和在一起,将里面的a替换成b;
sed 'N; /pattern/D' file, 将file里面两行一起的处理,匹配到pattern后,将前面的一行删除,D也是一个多行处理选项;
sed 在shell脚本中使用多个命令,{ 和 }都单独各占一行; sed ‘1a \xxx’第一行后追加1行 sed ‘1i \xxx’第一行后插入1行 sed -n '^$/!p' 打印全部文件内容 sed -n '1,10p' 打印1-10行内容
2. grep
命令格式为:grep options pattern file
grep -r 递归目录查找
grep -n 打印行数
grep -i 忽略大小写
grep -v 反向匹配查找
grep -F -f 可以用来处理获得两个文件的交集,或者差集;
3. gawk
gawk是awk的gnu版本,该工具让流编辑器上了一层台阶,可以提供一个类编程的环境,而不再仅仅是一个命令行工具。
命令格式为: gawk options program file,
gawk会从标准输入等待数据的输入,program用一对花括号来定义; 数据字段变量,$0表示整个文本行,$n表示第n个数据段 一些重要的内建变量:FILEDWIDTH, FS,RS,OFS,ORS; BEGIN表示处理前运行的操作, END表示处理结束后运行的操作; 支持if,while,do-while等函数定义;
4. sort
sort -k 指定排序的栏;
sort -r 反转排序,数字默认的是由小到大;
sort -n 指定按照数字排序;
5. 正则表达式
在shell中熟练使用sed和awk的关键在于对正则表达式的运用,正则表达式,就是一套有用户定义的,用来过滤数据流的规则。
正则表达式的难点在于,linux环境下不同的应用程序可能有不同的正则表达式规则。
再次总结通用的两种类型: BRE(basic regular expression),基本上都支持这种规则, ERE(extend regular expression),扩展类型,部分应用程序支持(gawk可以,sed不行);
BRE的规则主要有:
^ 行首
$ 行尾
. 任意字符,除了换行符
* 任意字符出现一次或者多次
[] 区间匹配
[^abc] 排除字符组
[[:alpha:]] 匹配字母,不区分大小写
[[:alnum:]] 匹配数字和字母,不区分大小写
[[:digit:]] 匹配数字
[[:blank:]] 匹配空格或者tab
[[:print:]] 匹配可打印字符
[[:punct:]] 匹配标点符号
[[:space:]] 匹配任意空白字符
[[:lower:]] 匹配小写
[[:upper:]] 匹配大写
ERE的规则主要有:
?前面的字符出现0次或者1次
+ 前面的字符出现1次或者多次
| 可以将两个过滤表达式按照或的关系连起来
{m} 前面的字符出现m次
{n,m} 前面的字符出现n-m次
() 将括号内部的匹配聚合成一个整体,当成一次标准字符使用;
shell文本处理工具总结的更多相关文章
- Linux shell文本处理工具
搞定Linux Shell文本处理工具,看完这篇集锦就够了 Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替.既然是基本功,那就需要掌握,毕竟学习She ...
- Linux Shell 文本处理工具集锦 zz
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...
- Linux Shell 文本处理工具集锦
本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...
- [转] Linux Shell 文本处理工具集锦
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...
- Linux Shell 文本处理工具集锦(转载)
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...
- Shell 文本处理工具
转载自:http://www.cnblogs.com/wish123/p/5540210.html Linux下使用Shell处理文本时最常用的工具: find.grep.xargs.sort.uni ...
- Linux Shell 文本处理工具
Linux下使用Shell处理文本时最常用的工具: find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk: 提供的例子和参数都是最常用和最为实用的: 我对 ...
- Linux Shell 文本处理工具集锦--Awk―sed―cut(row-based, column-based),find、grep、xargs、sort、uniq、tr、cut、paste、wc
本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...
- Linux Shell 文本处理工具集锦【转】
转自:http://www.cnblogs.com/me115/p/3427319.html 内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq ...
随机推荐
- sql的where条件转换成mongdb筛选条件
解析字符串 filterModel1 and filterModel2 and (filterModel3 or filterModel4) 1.转换成mongo的筛选条件 /// <summa ...
- Java8函数之旅 (二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
- AngularJS 外部文件中的控制器
在大型的应用程序中,通常是把控制器存储在外部的文件中. <!DOCTYPE html><html><head><meta http-equiv="C ...
- 成员变量和成员函数前加static的作用?
成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数.分别用来反映类的状态.比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作 ...
- iOS面试题总结(持续更新)
过段时间打算跳槽,找了一些面试题来做,在这里做个总结方便review,希望能对要面试的童鞋有帮助. 以下为面试题: 运行以下代码会有什么结果 NSString *str1 = @"str1& ...
- 通过Samba实现Linux与Windows间的文件共享
Samba Samba,是用来让Linux系列的操作系统与Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网 ...
- Can't connect to local MySQL server through socket '/tmp/mysql.sock'
今天在连接mysql的时候出现了上面的错误, 很明显原因找不到/socket 文件 查了半天才发现原来是mysql没有开启 service mysqld start 开启之后在/tmp/目录下回自 ...
- 工作中遇到的比较奇怪的一些sql(一些子查询)
在列中进行子查询 1.在一个表中有多个员工ID,比如一个下单员工,一个修改订单的员工,可以使用在列中进行子查询,具体如下: ( SELECT staff_name FROM sp_staff_basi ...
- POJ:2449-Remmarguts' Date(单源第K短路)
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 33081 Accepted: 8993 Des ...
- 26-dotnet watch run 和attach到进程调试
1-打开vscode, 按下Ctrl+`,打开命令行窗口 创建一个donet core mvc项目 2-打开刚刚创建的文件夹 3-输入 dotnet run 访问网站 4 -F5键即可调试 5-更改代 ...