三个支持正则表达式的行处理的工具: grep/sed/awk
grep:
全称Global Regular Expression Print, 是干什么的,不多说了;
用法:grep 【-options] [pattern】 【filename]
选项:
-c: 只输出匹配行的数目
-i: 不区分大小写
-n:显示匹配航以及行号
-l:查询多文件的时候只输出包含匹配字符的文件名
-L: 列出不匹配的文件名;
-v:反向匹配,即显示不匹配的行
-h: 查询的时候不适用文件名
-s:不显示错误信息
-E 使用扩展正则表达式 //很有用啊,
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行 -B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行 -C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
pattern:
指的正则表达式;用双引号“”或单引号‘’引用起来;
例子:
int main() {
printf int
iostreamsd print include interfaces j
int a = 0, i;
int. main() {
printf("hello,world!\n");
for(i=0; i<10; i++)
. a = a + i;
return 0;
}
匹配括号里的内容:
yinheyi@ubuntu:~/play$ grep -nE "\(.+\)" hello.c
7: printf("hello,world!\n");
8: for(i=0; i<10; i++)
sed 的用法:(来自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html)
sed 是一种在线编辑器,它一次处理一行内容;它也可以处理 正则表达式(其中用//来把正则表达式括起来);下面为它的用法:
sed 【参数】 【动作】 文件
参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
补充:(来自:http://blog.csdn.net/wh_19910525/article/details/7613090)
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换 w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
举例子:
sed '1a\shabi‘ hello.c //在第一行后面增加一行;
sed '1,4d' hello.c // 把第一行至第四行删除;
sed -nr '/^int/p' hello.c // 把开头为int的行打印出来;
sed -nr '/^[^int]/p' hello.c // 把开头不是int的行打印出来; sed '1,20s/int/sb/g' hello.c // 把第一行到第20行中的int换为sb;
//多个命令用{}括起来,并用 ; 分开;
如:
sed -n '/int/{s/int/char/g;p}' hello.c //把含有 int 的行 换为 char 并打印出来;
AWK更牛逼:
它可以把文件逐行读入,心空格或其它指定的分隔符将每一行切片,切开的部分再进行各种分析处理;
如何调用 awk?(来自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html)
三个方法:1, 命令行形式;也是下面要讲的形式;
2. shell 脚本方式, 与bash 一样的道理;
3. 将所有命令写入到一个单独的文件,然后调用 awk –f awk-script-file input-file, 我觉得这个方式与 shell 脚本形式差不多啊;
awk的工作原理:(来自:http://man.linuxde.net/awk)
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。说明:
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。(把Pattern当作一个条件比较好理解;)
预备知识1:内置变量 (下面内容参考自:http://www.zsythink.net/archives/tag/awk/)
另外: $0,表示整个条记录; $1表示当前行的第一个域,$2表示当前行的第二个域
预备知识2: 模式各类;(下面内容参考自:http://www.zsythink.net/archives/tag/awk/)
- 空模式:就是空的,没有 ,任何行都满足这个模式;
- 关系模式:就是指的符合关系运算符的模式;如下所示:
- 正则表达式模式: 说明两点,1. 用 // 把正则表达式括起来;2. 它使用的为扩展的正则表达式,当使用{x,y}这种次数匹配时,需要加上参数 –posix或 –re-interval;
- 行范围模式 :举个例子说明:
// 用正则表达式来指定行的范围,(注意:都以第一次匹配的行为准)
awk '/正则1/,/正则2/{动作}' hello.c //当单纯地使用行号时,应该使用 NR变量;
awk -F ':' 'NR>=3&&NR<=6{printf("%s@%s\n"), $1,$2}' passwd- BEGIN和END模式; 不多说,上面已经说明;
说明:可以多个模式并列的;pattern省略与为1,等价于/.*/;action省略,等价于 print; 很有用的;
awk的打印命令:
print函数:print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。 说明一点:当两个打印的变量想用内容连接时,使用“内容”。
// 例子: yinheyi@ubuntu:~/play$ echo "hello" | awk 'BEGIN{a="xiaoming";b="xiaohong"} {print a ,b}'
xiaoming xiaohong
yinheyi@ubuntu:~/play$ echo "hello" | awk 'BEGIN{a="xiaoming";b="xiaohong"} {print a"@"b}'
xiaoming@xiaohongprintf函数:其用法和C语言的差不多,可以格式化输出;不多说;
awk的动作命令:(下面内容参考自:http://www.zsythink.net/archives/tag/awk/)
1. 它的动作命令用{}括起来; 多个命令之间用;分开,如{print $1; print $2}
2. {}里面可以放入一起C语言的控制语句,如判断、循环等;
3. 使用awk 之外的变量时,用‘’ 引起来,比如:
echo “12 34 12” | awk ‘{$1=‘$num’;print}’
awk的使用:
参数:-F ,指定输分隔符,分隔符用’’引起来;如: awk –F ‘:’ ;
好,先到这里吧;
三个支持正则表达式的行处理的工具: grep/sed/awk的更多相关文章
- linux中使用head,tail,grep, sed,awk三种方法显示文档中间若干行(指定任意行)
需要显示文本中间20-25行. 创建一个30行的文档,命名为30.txt并显示在屏幕 [root@v2-ui data]# seq 30 > 30.txt && cat 30.t ...
- Linux 正则表达式 vi, grep, sed, awk
1. vi 表示内容的元字符 模式 含义 . 匹配任意字符 [abc] 匹配方括号中的任意一个字符.可以使用-表示字符范围,如[a-z0-9]匹配小写字母和阿拉伯数字. [^abc] 在方 ...
- linux 三大利器 grep sed awk 正则表达式
正则表达式目标 正则表达式单字符: 特定字符 范围字符:单个字符[ ] :代表查找单个字符,括号内为字符范围 数字字符:[0-9],[259] 查找 0~9 和 2.5 .9 中的任意一个字符 小写字 ...
- 开发环境入门 linux基础 (部分)正则表达式 grep sed
/etc/profile /etc/bashrc .变量添加到shell环境中,永久生效. /root/.bashrc /root/.bash_profile 正则表达式 定义:正则就是用一些具有特 ...
- Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...
- MySQL(三)用正则表达式搜索
正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较: 所有种类的程序设计语言.文本编辑器.操作系统等都支持正则表达式,正则表达式用正则表达式语言来建立: My ...
- Selenium2+python自动化61-Chrome您使用的是不受支持的命令行标记:--ignore-certificate-errors
前言 您使用的是不受支持的命令行标记:--ignore-certificate-errors.稳定性和安全性会有所下降 selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrom ...
- 三联动 支持ie6,ie7 省,市,区
三联动 支持ie6,ie7 省,市,区 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <tit ...
随机推荐
- angular学习笔记(三十)-指令(4)-transclude
本篇主要介绍指令的transclude属性: transclude的值有三个: 1.transclude:false(默认值) 不启用transclude功能. 2.transclude:true 启 ...
- frame自适应
<html> <head> <title>frame自适应</title> </head> <frameset rows=" ...
- 本地存储localStorage以及它的封装接口store.js的使用
本地存储localStorage以及它的封装接口store.js的使用 sublime-text chrome javascript readyGo 2016年11月20日发布 0 推荐 9 收藏 ...
- LVS之NAT和DR服务脚本
NAT服务控制脚本 #!/bin/bash # # chkconfig: - 88 12 # description: LVS script for VS/NAT # . /etc/rc.d/init ...
- 遍历目录下的所有文件-os.walk
#coding:utf-8 import os for root,dirs,files in os.walk("D:"): for fileItem in files: print ...
- 真机调试报错error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎已断开与互联网的连接。"
真机调试报错error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎已断开与互联网的连接." 请注意,错误代码是-1009,网上关于 ...
- asp.net基于StateServer的二级域名共享session
备注:亲自试验有效,如果网友有通过下面的教程未实现session共享的,欢迎留言说明你遇到的问题.必有回复. 最近为实现的二级域名共享session纠结好久.网上的很多实现的方法试了都不行,查了很久才 ...
- Error: failure: repodata/repomd.xml from fedora: [Errno 256] No more mirrors to try.
记录一个小问题,重新买的linux换yum源的时候一直提示: Error: failure: repodata/repomd.xml ] No more mirrors to try. 一直说那个XM ...
- Python开源机器学习框架:Scikit-learn六大功能,安装和运行Scikit-learn
Python开源机器学习框架:Scikit-learn入门指南. Scikit-learn的六大功能 Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预 ...
- andriod创建用户界面(1)
一.UI知识Activity 将UI放在一个Activity上面,可以在Activity的onCreate方法中添加UI. @Override public void onCreate(Bundle ...