[笔记] 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 ...
随机推荐
- C++大数相加
c++ string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=tem ...
- POJ 2033 Alphacode
Alphacode Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11666 Accepted: 3564 Descri ...
- OGNL表达式详解
OGNL表达式标签中的值有三种: 1.直接是OGNL表达式. 2.字符串需转义自OGNL表达式. 1)OGNL表达式转换为字符串显示,需要用''(单引号)引起来. 2)转为OGNL表达式的字符串,需要 ...
- 【Luogu】P2962灯Lights(折半搜索)
题目链接 本意是想学高斯消元,然后一顿乱搞之后学到了一个神奇的搜索方式叫做折半搜索. qwq 就是我先dfs前二分之n个点,然后再dfs后二分之n个点. 然后我dfs后二分之n个点的时候判断一下第一次 ...
- IE6 IE7下li间距、高度不一致问题(转)
http://www.phpddt.com/dhtml/926.html 问题描述:li的高度在IE6 IE7间距高度和其他浏览器不一致,即便设定了高度,IE6,7中,仍比其他浏览器要高. 解决方法: ...
- bzoj1566【Noi2009】管道取珠
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1566 两个栈不断pop,共C(n+m,n)种,ai表示每个相同序列的方案数,求∑(ai^2) ...
- jenkins使用xvfb插件构建虚拟化显示屏自动化测试
1.linux服务器安装xvfb,并启动 参考我的博客:http://www.cnblogs.com/lincj/p/5468505.html 或者网上搜索一下进行安装 2.jenkins安装xvfb ...
- bzoj 2961 共点圆 cdq+凸包+三分
题目大意 两种操作 1)插入一个过原点的圆 2)询问一个点是否在所有的圆中 分析 在圆中则在半径范围内 设圆心 \(x,y\) 查询点\(x_0,y_0\) 则\(\sqrt{(x-x_0)^2+(y ...
- 快速沃尔什变换 FWT
FWT 是处理位运算卷积的有效工具…… 原理……不懂,但背板子很简单,在这贴博客是为了放个模板,免得到时候忘记. 其中0为或卷积,1为与卷积,2为异或卷积…… void FWT(long long a ...
- Codeforces 946 B.Weird Subtraction Process
B. Weird Subtraction Process time limit per test 1 second memory limit per test 256 megabytes inpu ...