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++——创建类的时候用new与不用new 的区别
转自:https://www.cnblogs.com/tony-li/p/4111588.html C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test ...
- SQL统计信息解释
[SQL基础]统计信息解释 在平时优化SQL的时候,最长用的就是:SET STATISTICS ON,它可以用来查看我们写的查询语句到底性能如何,不过,究竟这个性能的指标是怎么样的呢?首先需要明白的, ...
- ThinkPHP语法总结
1, $data存放实体: $data['title'] = I('post.title'); // 标题 $data['content'] = I('post.content'); // 正文 $d ...
- Spring七大框架
Spring Core:最基础部分,提供IOC和依赖注入.基础概念是BeanFactory,提供对Factory模式的经典实现,这样来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关 ...
- ThinkPHP5执行流程分析
1.入口文件(tp5\public\index.php) 作用: 1)定义目录常量. 2)加载框架引导目录. 2.框架引导目录(tp5\thinkphp\start.php) 作用: 1)引导基础文件 ...
- 20135320赵瀚青LINUX第一章读书笔记
第一章-Linux内核简介 Unix的历史 依旧被认为是最强大和最优秀的系统 由一个失败的操作系统Multics中产生 被移植到PDP-11型机中 由其他组织进一步开发 重写了虚拟内存系统,最终官方版 ...
- win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)
转自:http://blog.csdn.net/lhh31/article/details/51979293 1.软件版本 首先我先安装了 python 2.7 pip是 8.1.2 2.当我要安装 ...
- MR案例:输出/输入SequenceFile
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File).在SequenceFile文件中,每一个key-value对被看做是一条记 ...
- iOS开发进阶 - 富文本正则替换表情
移动端访问不佳,请访问我的个人博客 最近写项目需要用到富文本解析字符串显示表情,下面是我使用正则替换实现富文本的方式,希望能帮助到大家 先上效果图和demo地址 实现过程中需要用到的知识点 NSReg ...
- No module named _sqlite3 django python manage.py runserver
linux 执行django(python manage.py runserver),报错No module named _sqlite3,需要安装sqlite-devel,再重新编译安装python ...