[笔记] sed and awk
/ awk程序的典型示例是将数据转换成格式化的报表,当数据拥有某种结构时就能最好的体现awk的好处;可以使用awk脚本对数据的列重新排序,甚至可以将列变成行以及将行变成列;awk的功能将文本编辑的思想扩展到计算,使他有可能执行各种数据处理任务,包括分析、提取和数据报告。
/ 使用sed,必须了解一组单字母的命令;使用awk们必须了解程序设计语言的语句;
/ sed和awk都是从文本文件中一次一行的读取输入,并将输出直接送到标准输出端;区别在于他们控制所做的工作时所用的指令不同,这是一个主要的区别,而且这影响了这些程序最适于处理的任务类型。
/ awk起源于sed和grep,而不是ed(grep和sed起源于ed);
/ ed中's/regular/complex/'由于没有指定地址,所以他只影响当前行上的第一次出现,为了寻找同一行上的多次出现,必须指定g作为标志:'s/regular/complex/g';必须指定地址从而使该命令不只是对当前行操作:'/regular/s/regular/complex/g',这个命令影响文件中与这个地址匹配的第一行;要将他应用于所有的行,必须使用全局命令,即在地址前放置g:'g/regular/s/regular/complex/g';如果地址与模式相同,那么可以通过指定两个连续的丁姐夫(//)来告诉ed:'g/regular/s//complex/g';
/ grep来源于ed中的全局命令:'g/re/p',他表示“全局正则表达式打印”,grep是从ed中提取并可用作外部程序的行编辑命令,他将正则表达式作为命令行上的一个参数并将它用作要打印的行的地址;
/ sed命令是隐式的全局命令,在ed中,使用寻址扩大受命令影响的行数;在sed中,使用寻址限制受命令影响的行数;
/ awk与sed不同的地方是他废弃了行编辑器的命令集,它提供了效仿C语言的程序设计语言,例如,print语句取代p命令;但延续了寻址的概念,例如:'/regular/ {print}'
/ 在sed和awk中,每个命令都包括两部分:模式和过程,模式是由斜杠(/)分割的正则表达式,过程指定一个或多个将被执行的动作;当所有可用指令被解释并应用于单个行后,sed输出该行并循环处理每个输入行;而awk不自动输出,脚本中的命令控制awk最终所做的事情;
/ 3种指定命令行上的多重指令:1.用分号分割命令 sed 's/MA/ma/;s/PA/pa/' file 2.在每个指令前放置-e:sed -e 's/MA/ma/' -e 's/PA/pa/' file 3.在输入单引号后按ENTER键;
/sed中 -n选项可以阻止自动输出,当指定该选项时,每个要生成输出的指令都必须包括打印命令p;
/ awk中一个或多个连续的空格或制表符被看做一个定界符,awk允许在模式或过程中引用这些字段:$0表示整个输入行,$1、$2、……表示输入行上的各个字段;
/ 基本的元字符集是由ed引入的,而且在grep中可用,sed使用相同的元字符集;awk基本上使用与egrep相同的扩展的元字符集;
/ 基本元字符集:. * [] ^ $ \{n,m\} \(转义后面的特殊字符)
扩展的元字符集(egrep/awk):+ ? | () {n,m}
/ 如果要寻找单词的任意序列,他们也许出现在一行上,但也许被分成两行;解决:用到sed的保持空间
#!/bin/bash
# phrase -- 检查跨行的单词
# $1 = 查找的字符串;剩余参数 = 文件名
search=$1
shift
for file
do
sed '
/'"$search"'/b
N
h
s/.*\n//
/'"$search"'/b
g
s/ *\n//
/'"$search"'/{
g
b
}
g
D' $file
done
/ sed维护一种模式空间,即一个工作区或临时缓冲区,当应用编辑命令时将在哪里存储单个输入行;sed还维护了称为保持空间(hold space)的另一个临时缓冲区,可以将模式空间的内容复制到保持空间并在以后检索它们;
/ sed地址后面跟有感叹号,那么命令就应用于不匹配该地址的所有行:'/^\.TS/,/^\.TE/!d';
/ sed中的行号计数器不会因为多个输入文件而重置,因此不过指定多少个输入文件,在输入流中也只有一行1
/ sed使用大括号将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令:
/^\.TS/,\.TE/{
/^$/d
}
左大括号必须在行末,而且右大括号本身必须单独占一行,要确保在大括号之后没有空格;
/ 例如:'s/^$/.LP/' 在替换命令的替代部分不必转义字面句点;
/ sed中在s命令的结尾添加全局标志以便取代所有的出现(不只是第一个);
/ sed的s命令中的定界符,不管是哪种定界符,如果他出现在正则表达式中或者替换文本中,那么就用反斜杠来转义他;
/ 在replacement部分。只有下列字符有特殊含义:
& 用正则表达式匹配的内容进行替换;
\n 匹配第n个子串(n是一个数字),这个子串在patten中用“\(”和“\)”指定;
\ 当在替换部分包含&,\和替换命令的定界符时可用\转义它们,另外可用于转义换行符来创建多行replacement字符串;
/ awk的BEGIN模式用于指定在第一个输入行读入之前要执行的动作,如果一个程序只有一个BEGIN模式,并且没有其他的语句,awk将不处理任何输入文件;
/ awk中如果没有指定操作,与模式匹配的输入行将被打印出来(执行打印语句是一个默认操作);
/ awk '{ print $2,$1,$3 }' file print语句中分割每个参数的逗号使得输出的各值之间有一个空格(也就是输出字段分隔符OFS);
/ 使用-F选型改变字段分隔符,后面跟着(紧跟或者有空白)分隔符;
/ 使用(~)操作符可以测试一个字段的正则表达式:'$5 ~ /MA/ { print $1 "," $6 }';也可使用(!~)来反转这个规则的含义;
/ 根据POSIX参数分析约定,选项“--”标记命令行选型的结束;
显示最后一列:awk '{print $NF}' file
[笔记] sed and awk的更多相关文章
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- sed and awk学习笔记
sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...
- 使用Sed和Awk实现批量文件的文本替换
摘要: 使用 Sed 完成文本替换操作任务是非常合适的.结合 find 命令,即可实现指定批量文件的文本替换.同时给出了Awk的解决方案作为对比. 问题 现在, 我要将一个原有Java项目中的一些包及 ...
- Sed、Awk单行脚本快速参考
文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
- sh脚本学习之: sh脚本 、sed、awk
sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...
- 一个利用sed和awk处理文本的小栗子
这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...
- Pyp 替代sed,awk的文本处理工具
Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...
- 三大文本处理工具grep、sed及awk的简单介绍
grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...
- sed和awk最佳入门教程
文档<sed和awk最佳入门教程>——摘自<实战linux shell编程与服务器管理>,简单易懂,适合初学者. 下载地址:http://download.csdn.net/d ...
随机推荐
- 剑指offer 面试题38
面试题38:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 主要的思路是进 ...
- web结对项目
一.Coding.Net项目地址: https://git.coding.net/verde/Pair_Work.git 二.对接口进行的设计 看教科书和其它资料中关于Informati ...
- PHP服务接口测试
最近百度Hi项目拟针对内部员工版本增加设备绑定功能,也许是公司出于对员工聊天信息安全性的考虑,同时也考虑到后期会有相应的员工名片等功能的推出,设备绑定的过程也是为了员工名片功能做个准备吧!设备绑定的服 ...
- 备忘 CSS字体中英文名称对照表
转载自:http://www.jb51.net/css/67658.html 在CSS文件中,我们常看到有些字体名称变成了乱码,这是由于编写者将中文字体的名字直接写成了中文,并且再上传或者拷贝复制的时 ...
- BZOJ 3167 [Heoi2013]Sao ——树形DP
BZOJ4824的强化版. 改变枚举的方案,使用前缀和进行DP优化. 然后复杂度就是$O(n^2)$了. #include <map> #include <cmath> #in ...
- (C++一本通)最少转弯问题 (经典搜索)
题目描述 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能 ...
- mybatis读取oracle中blob
controller: byte[] blob = commonService.getPersonImage(bean.getIdCard()); String base64 = new String ...
- PHP中的验证码类(验证码功能设计之二)
运行结果: <!--vcode.class.php内容--> <?php class Vcode { private $width; //宽 private $height; //高 ...
- 【CF1023C】Bracket Subsequence(模拟)
题意:给定一个正则括号序列 s ,让你在当中选择一个长度正好为 t 的子串,使得 t 恰好也是一个正则括号序列 思路:用栈模拟 #include<cstdio> #include<c ...
- hdu 3307(欧拉函数+好题)
Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/327 ...