[笔记] 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 ...
随机推荐
- js多少时间之前
<?php $time = time()*1000; $end_time = strtotime("2018-01-01")*1000; $time_ago = $time ...
- 第002弹:Java 中的值传递和引用传递
在 Java 的代码开发过程中,为了尽可能提高方法的复用性,明确方法的作用,同时防止一个方法内部过于臃肿的问题,往往会创建许多方法,那么不可避免地会涉及到参数传递的问题.通常来说,我们将 Java 中 ...
- Linux Shell系列教程之(一)Shell简介
本文是Linux Shell系列教程的第(一)篇,更多shell教程请看:Linux Shell系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知识. S ...
- iOS-----openGL--openGL ES iOS 入门篇--->搭建openGL环境
OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...
- CSS3box-shadow属性的使用
每次使用box-shadow,都要查阅资料才能实现对应的效果,现在总结一下,方便以后查看. 一.语法: E {box-shadow: inset x-offset y-offset blur-radi ...
- WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程(转)
本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程 WebRTC VideoEngine综合应用示例(二)——集成OPENH264编解码器 ...
- 31深入理解C指针之---指针和字符串
一.字符串与指针 1.定义:使用字符指针表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符指针 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用类似于数组的 ...
- AC日记——[JLOI2014]松鼠的新家 洛谷 P3258
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...
- ping++微信渠道,第二次拉起不能进行支付返回订单号重复问题
项目中用到了支付功能,采用的是ping++实现的,上线运行一年多都很正常,但是最近突然出现有买家反映说不能进行支付的情况 通过了解和沟通之后发现发现是重复拉起失败,然后我们对问题进行了排查. 测试过程 ...
- 一、git clone
一.git clone $ git clone <版本库的网址> //该命令会在本地主机生成一个目录,与远程主机的版本库同名 $ git clone <版本库的网址> < ...