LINUX系统下的shell命令---grep、sed、awk
1、grep基本认识
(Global search regular expression and print out the line全局搜索研究正则表达时并显示出来)。grep命令是一种强大的文本搜索工具,根据用户指定模式,对目标文本进行匹配检查,打印匹配到的行。
2、语法: grep 匹配条件 处理的文件名
匹配条件可以是:搜索的字符串、数字等,也可以使用正表达式,通配符等等
处理的文件名可以是:目录/文件 或 .
3.参数:
4、grep中字符的匹配次数设定
* 字符出现0到n次
? 字符出现0或1次
+ 字符出现1到n次
{4} 字符出现4次
{1,5} 字符出现次数,最少1次,最多5次
{m,} 字符出现次数最少m次
(xy){4} 字符xy出现次数为4次
5.示例:
- grep root pass ##查看pass文件中含有root字符的结果
 
- grep ^root pass ##查看开头为root的结果
 
- grep root$ pass ##显示以root结尾的行的结果
 
- grep -i root pass ##显示的时候,忽略大小写
 
- grep -E "root|ROOT" pass ##显示为root或者ROOT的结果(注意。使用-E时,是有两个条件)
 
- grep root pass | grep -E "^root|root$" -v ##在root行中,显示除了开头和结尾是root的。(-v表示反向选择)
 
- grep -E '\<...r' pass ##显示以r结尾(但r不是最后一个字符)且前面是三个字母的(\<表示r前面只能有三个字符)
 
- grep -E "\<...t\>" pass ##高亮显示的字母一定是4个,且最后一个是t
 
- grep ....t pass ##显示结果如下:
 
- grep -E "\<[[:alpha:]]{3}\>|[[:digit:]]{1,}" xniu ##显示含有三个小写字母或者含数字的行
 
- grep -E 'xa*y' test ##有结果可知,*表示xy中见a的个数为0到n
 
- grep -E 'xa?y' test ##由结果可只,?表示a的个数为0或1个
 
- 用 + 表示a的个数为1到n;{4}表示a的个数只能为4个
 
2)sed行编辑器
1、 sed相关介绍:
(stream  editor)是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。用来操作纯ASCLL码的文本。处理时,把当前的行存储在临时缓冲区中,称为模式空间(pattern space),可以指定仅仅处理哪些行;处理完成时,把缓冲区的内容送到屏幕;接着下一行的处理。
   2、语法:sed  [options]      'command'   file(s)
sed    [options]    -f  scriptfile   file(s)                           
   3、常用参数
-n∶使用安静(silent)模式。在一般情况下,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
4、常用模式:
p 显示模式
-d 删除模式
a 向下插入模式
i 向上插入模式
c 替换模式
w 写入文件模式
r 插入文件模式
= 添加行号
5、操作示例:
- 分别显示fstab文件中4到6行、第四和六行、第六行的内容
 
- 显示除了第6行的所有行 (在进行取操作时,在p前面添加)
 
- sed -n '/^#/p' fstab ##显示以#开头的内容 (其中//中添加关键字);-n 表示只显示最终结果;若没有n时,fatab中的内容会显示出来
 
- cat -n fstab | sed '5,7d' 删除5到7行
 
- cat -n fstab | sed -e '5d;7d' 删除第五和第七行
 
- sed '/^#/d' fstab ##删除#开头的所有行
 
- sed '/UUID/aword\nhello' file ##在file文件UUID的下一行添加word;再下一行中添加hello
 
- sed '/UUID/ixniu' fstab ##在文件的UUID前面插入xniu
 
- sed -n '/^#/wxniu' fstab ##以#开头的行写入文件xniu中,-n不显示fstab的内容
 
- sed 's/\<bin/hello/g' pass ##把所有行和列中中以bin开头的修改为/hello
 
- sed 's@\/@%%@g' pass ##此时的@与/功能类似
 
- sed '=' pass | sed 'N;s/\n/ /g' ##修改\n为空;意思去掉空格。N表示可以时\n生效;=添加行号
 
- sed -f rule pass ##在rule文件中写入要执行的变化
 
- sed -n '/^#/=' fstab ##只显示行号,无内容
 
- sed '/^#/=' fstab ## 显示#开头的行号和对应内容
 
- sed '$r user' fstab ##把文件user中的内容加入fstab的最后一行
 
- sed '1r user' fstab ##把user中的内容加入第一行
 
- sed '/UUID/r user' fstab ##加在UUID所在行的下一行
 
- sed '/hello/cniu' -i aa ##-i修改时,同时修改文件中的内容
 
- sed 'G' pass ##使文件data中的每行都隔开一行显示
 
- sed '$!G' pass ##文件的最后一行没有间隔
 
- sed -n '$p' pass ##显示最后一行的内容
 
- sed '/root/,/mail/s/nologin/##/g;s/sbin/westos/g' pass        ##查看固定区域内的且修改sbin为westos
 
3)awk报告生成器
1、awk基本介绍
awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作。在命令格式上分别体现如下:
BEGIN{}:读入第一行文本之前执行,一般用来做初始化操作
{}:逐行处理,逐行读入文本并执行响相应的处理。
END{}:处理完最后一行文本之后执行,一般用来输出处理结果
2、基本用法
awk '{print filename}' passwd
awk '{print “NR”行,"NF"列}'
awk 'BEGIN{print NAME}'
awk 'END{print xniu}'
awk -F : 'BEGIN{print name}{print $1}END{XNIU}'
awk '/bash$/'
awk -F : '/bash$/{print $1}'
3、示例
- awk -F : '{print $1}' pass ##分割符为:,输出第一列的内容
 
- awk -F : '{print $1","$2}' pass ##在输出第一列和第二列时,添加符号时用“”
 
- awk -F : 'BEGIN{print "name"}{print $1}END{print "end"}' pass ##在输出第一列的时候,刚开始输出name,结束后输出end
 - awk -F : 'END{print NR","NF}' pass ##输出pass文件的行和列
 
- awk 'BEGIN{N=0}{N++}END{print N}' pass ##使用算法的自增计算行数
 - awk -F : '/bash$/{print $1}' /etc/passwd ##以:分隔符,输出以bash结尾的第一列
 
- awk -F : '/bash$/||/sh$/{print $1}' /etc/passwd ##使用||符号可以设置两个并列条件
 - cat -n pass | awk 'NR>=4&&NR<=6{print}' ##显示第四行到第6行的内容
 
- awk -F : '/^ro/{print}' /etc/passwd ##显示以ro开头行的内容
 
- awk -F : '/^[a-d]/{print $1","$6}' /etc/passwd ##显示以a-d任意字符开头第一列和第六列
 
- awk -F : '/^a|nologin$/{print $1$7}' pass ##显示以a开头或以nologin结尾的行内容的第一和七列
 
- awk -F : '$6~/bin$/{print $1" "$6}' pass ## 若第6列以bin结尾,则输出该行的第一列和第6列
 
- awk -F : '$6!~/bin$/{print $1" "$6}' pass ##输出第六列不以bin结尾的行的第1、6列
 
例题一: 显示本机的IP
ifconfig eth0 | awk '/\<inet/{print $2}' 或者 ifconfig eth0|sed -n 2p | awk -F " " '{print $2}' 或 awk -F = '/^IPADDR0/{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
         
例题二:查找以可以登陆系统的用户(bash类型),并且用户在home目录下
awk -F : '/bash$/&&$6~/^\/home/{print $1}' /etc/passwd
例题三:使用一条命令执行,找出/usr/share/mime/packages/freedesktop.org.xml文件中含有ICH的行,并去掉空格后存入/root/lines文件中。
sed 's/^ *//g;/ich/w/root.lines' /usr/share/mime/packages/freedesktop.org.xml
例题四:输出不含数字或特殊字符的test 
   awk  '!/^[[:digit:][:punct:]]/{print}'    test
LINUX系统下的shell命令---grep、sed、awk的更多相关文章
- LINUX系统下的shell命令---diff、cut、sort、uniq等
		
1)diff:比较两个文件或目录的不同 -b 不检查空格字符的不同 -B 不检查空白行 -c 显示全部内容,并标出不同之处 -i 不检查 ...
 - Linux系统下利用wget命令把整站下载做镜像网站
		
Linux系统下利用wget命令把整站下载做镜像网站 2011-05-28 18:13:01 | 1次阅读 | 评论:0 条 | itokit 在linux下完整的用wget命令整站采集网站做镜像 ...
 - Linux系统下的shutdown命令用于安全的关闭/重启计算机
		
Linux系统下的shutdown命令用于安全的关闭/重启计算机,它不仅可以方便的实现定时关机,还可以由用户决定关机时的相关参数.在执行shutdown命令时,系统会给每个终端(用户)发送一条屏显,提 ...
 - 【转载】在Linux系统下用dd命令制作ISO镜像U盘启动盘
		
#### 将U盘插入USB接口 #umount /dev/sdb* #dd if=/iso存放路径/XXX.iso of=/dev/sdb bs=1M ##### [转载]在Linux系统下用dd命令 ...
 - 【Linux】---Linux系统下各种常用命令总结
		
在Linux系统下,“万物皆文件”,之所以强调在强调这个概念,是因为很多人已经习惯了win系统下找找点点得那种方式和思维,因此总是会觉得linux系统下很多指令既复杂又难记.其实都是一样得东西,只是w ...
 - linux 三剑客命令(grep,sed ,awk)
		
grep 命令 :强大的文本’搜索’工具 1.grep -n 'word' file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号. 2 ...
 - 在Linux系统下用dd命令制作ISO镜像U盘启动盘
		
http://os.51cto.com/art/201510/494762.htm 首先在 Linux 系统中打开终端,确认 U 盘路径: sudo fdisk -l 使用 dd 命令,格式如下: s ...
 - 电源管理ACPI、及APM、GNU/Linux系统下的相应命令使用
		
/********************************************************************* * Author : Samson * Date ...
 - 云服务器 ECS Linux 系统下使用 dig 命令查询域名解析
		
云服务器 ECS Linux 系统可以使用通常自带的 dig 命令来查询域名解析情况.本文对此进行简要说明. 查询域名 A 记录 命令格式: dig <域名> 比如,查询域名 www.al ...
 
随机推荐
- C#创建类,方法,接口,字段 的 默认类型
			
1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型2.在一个类里面,属性和方法默认是private的,可以显示的定义为public.private.p ...
 - STC12C系列单片机PWM脉宽调制
			
最近给别人做了一个小东西,MCU选的是STC12C5A60S2 ,需要用到PWM控制功能. 在网上找了一下,发现解释的不尽人意,无奈之下自己琢磨数据手册弄明白了. 首先,STC12C5A60S2内置有 ...
 - Clonal hematopoiesis of indeterminate potential(意义不明的克隆性造血)-CHIP
			
意义不明的克隆性造血是指由一个造血干细胞或者其他早期的起始血细胞为了更好的适应环境而发展成一个带有一些基因变异的亚型. 这个亚型带有基因变异一般是非驱动性的,而且该亚型占血细胞的比率跟年龄有很大的相关 ...
 - 20145324Java课程总结
			
20145324课程总结 ●每周读书笔记链接总汇 [第一周](http://www.cnblogs.com/SJZGM10/p/5246770.html) 第二周(不小心删了) [第三周](http: ...
 - Linux禁止普通用户使用crontab命令
			
cron计划任务默认root用户与非root用户都可以执行,当然如果在安全方面想禁用这部分用户,则可以通过两个文件来解决: cron.allow cron.deny cron.allow:定义允许使用 ...
 - ng2 quickstart-primeng
			
1.导入quickstart-angular项目 2.安装primeng npm install primeng 3.安装@angular/animations npm install @angula ...
 - c++之初级的消息队列及线程池模型
			
1.最近项目不是很忙,结合之前看的一些开源代码(skynet及其他github代码)及项目代码,抽空写了一个简单的任务队列当做练习. 2.介绍: 1)全局队列中锁的使用:多线程下,全局队列需要加锁,本 ...
 - Hibernate与 MyBatis的比较(转,留作以后细细钻研)
			
最近做了一个Hibernate与MyBatis的对比总结,希望大家指出不对之处. 第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出 ...
 - 关于Java中常用加密/解密方法的实现
			
安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...
 - 转载:WEB前端的优化
			
一.HTML优化 避免使用Iframe Iframe也叫内联frame,可以把一个HTML文档嵌入到另一个文档中.使用iframe的好处是被嵌入的文档可以完全独立于其父文档,凭借此特点我们通常可以使浏 ...