Shell基础之-grep命令

grep命令

首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!
我会在当天或者第二天及时回复,并且改进~~



grep 一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

grep [option] [mode] [file]

-c      #只输出匹配行的数量
-i      #搜索时忽略大小写
-h      #查询多文件时不显示文件名
-l      #只列出符合匹配的文件名,而不列出具体的匹配行
-n      #列出所有的匹配行,并显示行号
-s      #不显示不存在或无匹配文本的错误信息
-v      #显示不包含匹配文本的所有行
-w      #匹配整词
-x      #匹配整行
-r      #递归搜索,不仅搜索当前工作目录,而且搜索子目录
-q      #禁止输出任何结果,以退出状态表示搜索是否成功
-b      #打印匹配行距文件头部的偏移量,以自己为单位
-o      #与-b选项结合使用,打印匹配的词距头部的偏移量,以字节为单位
-E      #支持扩展的正则表达式
-F      #不支持正则表达式,按照字符串的字面意思进行匹配

示例

grep -c root  /etc/passwd  #文本中有两个root匹配,即显示行数为2
grep -i xxx   new_file     #文本中有XXX和xxx,-i之后会忽略大小写都输出出来
grep -h root /etc/passwd /etc/shadow  #-h只会显示匹配的行,而不会显示匹配与哪个文件
grep -l root /etc/passwd /etc/shadow  #-l只会显示匹配的文件名,而不列出具体的匹配行
grep -n root /etc/passwd   #-n在输出匹配结果前面会加匹配的行号
grep -s root /etc/passwd   #不显示错误信息,例如: grep root /etc/passwdwdwd
grep -v root /etc/passwd   #列出除了匹配行root以外的所有行
grep -w root /etc/passwd   #列出文件中有单个root的单词的行
grep -x root /etc/passwd   #列出文件中有单个root为整行的行
grep -r root /tmp          #列出/tmp下面的root及子目录文件下的root,递归查询出所有的root字符
grep -q root /tmp/root     #不输出任何信息,以退出方式,成功为0,不成功为其他值
grep -vc root /etc/passwd /etc/shadow  #显示出文件pass和sha中有多少行是不包含root的行

1、匹配行首
(1)、检索”/etc/passwd”中以”root”开头的行,并打印出行号

grep -n ^root /etc/passwd

(2)、检索”/etc/services”文件中的空行,列出行号。再次检索空行有几行

grep -n ^$ /etc/services
grep -c ^$ /etc/services

(3)、搜索文件中以”-“开头,并且重复任意次,然后是D字符的匹配行
搜索文件中以”/”开头,中间”4”个任意字符,第”6”个字符仍为”/”的匹配行

grep ^-*D filename
grep ^/..../ filename

(4)、搜索”sed.edu.cn”的匹配行

grep sed\.edu\.cn

(5)、搜索”-“符号重复5次的文本行
搜索”the”精确匹配的行

grep '\-\{5\}' filename  #考验''和\{\}表达式的特性
grep '\<the\>' filename  #考验''和\<\>表达式的特性

grep #标准grep命令。支持正则表达式
egrep #扩展grep命令。支持基本和扩展正则表达式
fgrep #快速grep命令。不支持正则表达式,按照字符串的字面意思进行匹配

egrep #命令与 grep -E等价
fgrep #命令与 grep -F等价

分析下面的正则表达式表达了什么含义

(1)、kK*          grep kK* test            #列出文件test包含kK及后面有任意多个字符的行
(2)、k\{6,8\}     grep  'k\{6,8\}' test    #列出文件test中k单词重复6-8个的行
(3)、k\{6,\}      grep  'k\{6,\}' test     #列出文件test中k单词大于6个的行
(4)、k\{10\}      grep  'k\{6\}' test      #列出文件test中k单词为6个的行
(5)、^NEW YEAR$
(6)、^$                                    #空行
(7)、[0-9][0-9][a-z]  grep [0-9][0-9][a-z] file  #列出文件中前两个字符为数字,后一个字符为字母的匹配行
(8)、[A-H]\{1,3\},[0-9]\{5\} #grep '[a-h]\{1,3\}' test | grep '[0-9]\{5\}'       #列出1-3个a-h单词,5个数字的字符
(9)、^\...
(10)、[^p-z]*\.                                  #列出除了p-z以外的多个任意字符的行

2、利用通配功能列出某目录下所有以数字开头,最后3为是句点和2个任意字母的文件名

[0-9]*[a-z]\{2\}...

3、查看下面三条命令

   grep -c  ^$   filename    #列出空行的数目
   grep -c ^[^$] filename    #列出非空行的数目
   grep -c ^^$   filename    

4、统计当前目录及子目录下的所有文件所包含空白行的行数

grep -r ^$ /root/ | wc -l

5、统计当前目录及子目录下的所有文件包含非空白行的行数

grep -r ^[^$] /root/ | wc -l

6、结合对-符号的阐述,观察是否对错

grep -n -\{5,\}  file   #缺引号,缺转义符\-
grep -n '-\{5,\}' file  #缺转义符,系统默认不知道-是选项,应使用grep -n '\-\{5,\}' file 
时间: 2024-09-28 15:19:21

Shell基础之-grep命令的相关文章

Shell基础之-awk命令

Shell基础之-awk命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ awk编程 awk是一种编程语言.gawk.是最新版本,当前的linux版本用的都是gawk awk是gawk的软链接 awk工作原理 BEGIN #在未读取文件行之前执行 主输入循环 (main input loop),反复执行,直到终止条件触发 END #在读取文件行完毕后执行 1.在shell命令行输入命令调用awk #awk [-f 域分隔符] 'awk cmd'

Shell基础之-cut命令

Shell基础之-Cut命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ cut命令用于从标准输入文件或文本文件中按域或行提取文本 cut [option] file cut命令选项及其意义 -c #指定提取的字符数或字符范围 -f #指定提取的域数或域范围 -d #改变域分隔符 cut -c后跟数字表示字符数或字符范围,共有三种表示方式 -cn 表示第n个字符 -cn-m 表示n-m个字符 -cn,m 表示n.m两个字符 cut -f后跟数字

Shell基础之-sed命令

Shell基础之-sed命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ sed 是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑 sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件 sed命令调用的三种方式 1.在shell命令行输出命令调用sed sed [option] 'sed cmd' file 2.将sed命令插入脚本 sed [option] -f 'sed.sh' file vi sed.sh sed要调用

HBase shell基础和常用命令详解

http://www.aliyun.com/zixun/aggregation/13713.html">HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务. 1. 简介 HBase是一个分布式的.面向列的

hbase shell基础和常用命令详解_linux shell

HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务. 1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase

Shell基础之-sort命令

sort 对文件排序的工具 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ sort将输入文件看做由多条记录组成的数据流,而记录由可变宽的字段组成,以换行符作为定界符 sort [option] file sort命令选项及其意义 -c #测试文件是否已经被排序 -k #指定排序的域 -m #合并两个已排序的文件 -n #根据数字大小进行排序 -o [输出文件] #将输出写到指定的文件,相当于将输出重定向到指定文件 -r #将排序结果逆向显示 -t

Shell基础之-tr命令

tr命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ tr命令实现字符转换功能,其功能类似于sed命令,但是,tr命令比sed命令简单,也就是说,tr命令能实现的功能,sed命令都可以实现 tr [option] charset1 chatset2 < 输入文件 tr命令选项及其意义 -c #选定字符串1中字符集的补集,即反选字符串1中的字符集 -d #删除字符串1中出现的所有字符 -s #删除所有重复出现的字符序列,只保留一个 tr命令示例:

Shell基础之-paste命令

Paste命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ paste命令用于将文本文件或标准输出中的内容粘贴到新的文件,他可以将来自不同文件的数据粘贴到一起,形成新文件 paste [option] file1 file2 paste命令选项及其意义 -d #默认域分隔符是空格或tab键,设置新的域分隔符 -s #将每个文件粘贴成一行 - #从标准输入中读取数据 paste命令示例: 将文件name和age(年龄)合并在一起,(粘贴name和

Shell基础之-uniq命令

uniq 命令用于去除文本文件中的重复行 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ 查看sort和uniq去除重复行的区别 sort -t: -k7 -u /etc/passwd //去除passwd文件中域7重复的行 cat /etc/passwd | uniq //去除passwd文件中域7重复的行 区别1: sort 可以对指定的域进行排序并且去除重复行 uniq 则不可以对某个相同的域进行去除,只能去除记录相同的行 区别2: sort