grep命令参数及用法,linux命令大全之grep命令详解
grep命令参数及用法,linux命令大全之grep命令详解详细介绍
本文目录一览: grep命令详解
`grep` 是一个经典的命令行文本搜索工具,在Unix和类Unix系统上广泛使用。它用于在文件或者文本数据中查找匹配特定模式的行,并将匹配的结果打印出来。以下是 `grep` 命令的常见用法和选项:
基本语法:
```
grep [options] pattern [file ...]
```
常见选项:
- `-i`:忽略大小写进行匹配。
- `-v`:只打印不匹配的行。
- `-r`:递归地在目录中搜索。
- `-l`:只打印匹配的文件名,而不是匹配的行。
- `-n`:显示匹配行及其行号。
- `-w`:只匹配整个单词,而不是部分匹配。
常见示例:
1. 在文件中搜索匹配的行:
```
grep "pattern" file.txt
```
2. 忽略大小写搜索匹配的行:
```
grep -i "pattern" file.txt
```
3. 在多个文件中递归搜索匹配的行:
```
grep -r "pattern" directory/
```
4. 打印匹配的行及其行号:
```
grep -n "pattern" file.txt
```
5. 只打印不匹配的行:
```
grep -v "pattern" file.txt
```
以上是 `grep` 命令的一些常见用法和选项。`grep` 还有更多的选项和功能,你可以通过 `man grep` 命令查看其完整的文档和使用说明。
linux grep命令怎么用
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的详细使用方法有很厚一本书,此处无法详细说明,只能列出grep常用用法
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
Linux grep命令用于查找文件里符合条件的字符串或正则表达式。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep
指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法:
grep [options] pattern [files]
pattern - 表示要查找的字符串或正则表达式。
files - 表示要查找的文件名,可以同时查找多个文件,如果省略files参数,则默认从标准输入中读取数据。
常用选项:
-i:忽略大小写进行匹配
-v:反向查找,只打印不匹配的行
-n:显示匹配行的行号
-r:递归查找子目录中的文件
-l:只打印匹配的文件名
-c:只打印匹配的行数
更多参数:
-a或--text:不要忽略二进制的数据
-A
或--after-context=
:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b或--byte-offset:在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B
或--before-context=
:除了显示符合样式的那一行之外,并显示该行之前的内容。
-c或--count:计算符合样式的列数。
-C
或--context=
或-
:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d
或--directories=
:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e
或--regexp=
:指定字符串做为查找文件内容的样式。
-E或--extended-regexp:将样式为延伸的正则表达式来使用。
-f
或--file=
:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F或--fixed-regexp:将样式视为固定字符串的列表。
参数有很多,就不一一介绍了,希望大家在学习工作的过程中慢慢认识它们。
规则文件>
规则文件>
范本样式>
范本样式>
动作>
动作>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
grep命令详解
具体步骤如下:
1.grep命令的基本概念和用途
grep命令是linux中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
在一个或多个文件中搜素字符串模式,如果字符串模式包括空格,也必须被引用,模式后的所有字符串被看作文件名。搜索的结果被送到标准输出(stdout),不影响原文件内容。
grep也可以用于shell脚本,因为grep通过返回一个状态值来说明搜索的结果,如果模式搜索成功,则返回0;如果搜索不成功,则返回1;如果搜索的文件不存在,则返回2;我们利用这些返回值就可以进行一些自动化的文本处理工作。例
2.grep命令的命令格式
grep[option]pattern files
根据上面的命令格式,我们可以了解到grep命令主要有两个部分[option]和pattern,下面分别从这两个部分开始去了解熟悉grep命令。
1、主要选项[option]说明及示例:
-c : 只输出匹配行的计数
-i : 不区分大小写
-l : 查询多文件时只输出包含匹配字符的文件名
-n : 显示匹配行及行号
-s : 不显示不存在或无匹配文本的错误信息
-v : 显示不包含匹配文本的所有行
-o : 只显示匹配字符串的部分
2、pattern正则表达式主要参数[即元字符]说明和示例
-? : 同时显示匹配行的上下?行
^ : 匹配正则表达式的以“某字符串”开头的行
$ : 匹配正则表达式的以“某字符串”结尾的行
< : 从匹配正则表达式的行开始
> : 到匹配正则表达式的行结束
[ ] : 单个字符,如[A] 即A 符合要求
[^ ] : 显示不包括括号中字符串的所有行
[ - ] : 范围匹配,如[A-C],即A、B、C都符合要求;如[a,b],即只有a和b符合要求
. :单个字符,匹配任意一个字符
* :匹配“*”前面的字符,匹配0个或无数个
\ :用来屏蔽一个元字符的特殊含义,使其作为单纯的一个字符
另外有些字符类描述,大家有兴趣可以去记一下
[:alnum:] 字母数字集 “a-z A-Z 0-9”
[:alpha:] 字母集合 “a-z A-Z”
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字集合 “0-9”
[:graph:] 任何可视字符(无空格)
[:lower:] 小写字母 “a-z”
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写字母 “A-Z”
[:xdigit:] 十六进制数字 “0-9 a-f A-F”
3.grep命令简单使用
1、在文本中搜素只有一个字符的行,且为字母或数字
2、搜索开头不是英文字母的行
3、搜索非空行
4、搜索以s开头k结尾的行
Linux下Grep命令的详细使用方法?
Linux grep命令用于查找文件里符合条件的字符串或正则表达式。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法:
grep [options] pattern [files]
pattern - 表示要查找的字符串或正则表达式。
files - 表示要查找的文件名,可以同时查找多个文件,如果省略files参数,则默认从标准输入中读取数据。
常用选项:
-i:忽略大小写进行匹配
-v:反向查找,只打印不匹配的行
-n:显示匹配行的行号
-r:递归查找子目录中的文件
-l:只打印匹配的文件名
-c:只打印匹配的行数
更多参数:
-a或--text:不要忽略二进制的数据
-A
或--after-context=
:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b或--byte-offset:在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B
或--before-context=
:除了显示符合样式的那一行之外,并显示该行之前的内容。
-c或--count:计算符合样式的列数。
-C
或--context=
或-
:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d
或--directories=
:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e
或--regexp=
:指定字符串做为查找文件内容的样式。
-E或--extended-regexp:将样式为延伸的正则表达式来使用。
-f
或--file=
:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F或--fixed-regexp:将样式视为固定字符串的列表。
参数有很多,就不一一介绍了,希望大家在学习工作的过程中慢慢认识它们。
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。 假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件: $ grep magic /usr/src/linux/Documentation/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the magic SysRQ key? 其中文件‘sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。 默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出: grep: sound: Is a directory 这可能会使‘grep’的输出难于阅读。这里有两种解决的办法: 明确要求搜索子目录:grep -r 或忽略子目录:grep -d skip 当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读: $ grep magic /usr/src/linux/Documentation/* | less 这样,您就可以更方便地阅读。 有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。 下面是一些有意思的命令行参数: grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, grep -l pattern files :只列出匹配的文件名, grep -L pattern files :列出不匹配的文件名, grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’), grep -C number pattern files :匹配的上下文分别显示[number]行, grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 这里还有些用于搜索的特殊符号: \ 分别标注单词的开始与结尾。 例如: grep man * 会匹配 ‘Batman’、‘manic’、‘man’等, grep '\grep '\' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。 '^':指匹配的字符串在行首, '$':指匹配的字符串在行尾, 如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 🙂 。如果您只是需要更清楚的输出,不妨试试 fungrep 。
规则文件>
规则文件>
范本样式>
范本样式>
动作>
动作>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
linux命令大全之grep命令详解
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
???grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
???grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
1.命令格式:
复制代码
???
代码如下:
grep [option] pattern file
2.命令功能:
???用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
3.命令参数:
???-a ??--text ??#不要忽略二进制的数据。 ?
???-A显示行数 ??--after-context=显示行数 ??#除了显示符合范本样式的那一列之外,并显示该行之后的内容。 ?
???-b ??--byte-offset ??#在显示符合样式的那一行之前,标示出该行第一个字符的编号。 ?
???-B显示行数 ??--before-context=显示行数 ??#除了显示符合样式的那一行之外,并显示该行之前的内容。 ?
???-c ???--count ??#计算符合样式的列数。 ?
???-C显示行数 ???--context=显示行数或-显示行数 ??#除了显示符合样式的那一行之外,并显示该行之前后的内容。 ?
???-d 动作 ?????--directories=动作 ??#当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。 ?
???-e范本样式 ?--regexp=范本样式 ??#指定字符串做为查找文件内容的样式。 ?
???-E ?????--extended-regexp ??#将样式为延伸的普通表示法来使用。 ?
???-f规则文件 ?--file=规则文件 ??#指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 ?
???-F ??--fixed-regexp ??#将样式视为固定字符串的列表。 ?
???-G ??--basic-regexp ??#将样式视为普通的表示法来使用。 ?
???-h ??--no-filename ??#在显示符合样式的那一行之前,不标示该行所属的文件名称。 ?
???-H ??--with-filename ??#在显示符合样式的那一行之前,表示该行所属的文件名称。 ?
???-i ???--ignore-case ??#忽略字符大小写的差别。 ?
???-l ???--file-with-matches ??#列出文件内容符合指定的样式的文件名称。 ?
???-L ??--files-without-match ??#列出文件内容不符合指定的样式的文件名称。 ?
???-n ??--line-number ??#在显示符合样式的那一行之前,标示出该行的列数编号。 ?
???-q ??--quiet或--silent ??#不显示任何信息。 ?
???-r ??--recursive ??#此参数的效果和指定“-d recurse”参数相同。 ?
???-s ??--no-messages ??#不显示错误信息。 ?
???-v ??--revert-match ??#显示不包含匹配文本的所有行。 ?
???-V ??--version ??#显示版本信息。 ?
???-w ??--word-regexp ??#只显示全字符合的列。 ?
???-x ???--line-regexp ??#只显示全列符合的列。 ?
???-y ??#此参数的效果和指定“-i”参数相同。
4.规则表达式:
???grep的规则表达式:
???^ ?#锚定行的开始 如:'^grep'匹配所有以grep开头的行。 ??
???$ ?#锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 ??
???. ?#匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 ??
???* ?#匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 ??
???.* ??#一起用代表任意字符。 ?
???[] ??#匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 ??
???[^] ?#匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 ??
???/(../) ?#标记匹配字符,如'/(love/)',love被标记为1。 ??
???/ ?????#锚定单词的开始,如:'/grep'匹配包含以grep开头的单词的行。 ??
???/ ?????#锚定单词的结束,如'grep/'匹配包含以grep结尾的单词的行。 ??
???x/{m/} ?#重复字符x,m次,如:'0/{5/}'匹配包含5个o的行。 ??
???x/{m,/} ?#重复字符x,至少m次,如:'o/{5,/}'匹配至少有5个o的行。 ??
???x/{m,n/} ?#重复字符x,至少m次,不多于n次,如:'o/{5,10/}'匹配5--10个o的行。 ?
???/w ???#匹配文字和数字字符,也就是[A-Za-z0-9],如:'G/w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 ?
???/W ???#/w的反置形式,匹配一个或多个非单词字符,如点号句号等。 ?
???/b ???#单词锁定符,如: '/bgrep/b'只匹配grep。
???POSIX字符:
???为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
???[:alnum:] ???#文字数字字符 ?
???[:alpha:] ???#文字字符 ?
???[:digit:] ???#数字字符 ?
???[:graph:] ???#非空字符(非空格、控制字符) ?
???[:lower:] ???#小写字符 ?
???[:cntrl:] ???#控制字符 ?
???[:print:] ???#非空字符(包括空格) ?
???[:punct:] ???#标点符号 ?
???[:space:] ???#所有空白字符(新行,空格,制表符) ?
???[:upper:] ???#大写字符 ?
???[:xdigit:] ??#十六进制数字(0-9,a-f,A-F)
5.使用实例:
???实例1:查找指定进程
???命令:ps -ef|grep svn
???输出:
复制代码
???
代码如下:
[root@localhost ~]# ps -ef|grep svn
???root 4943 1 0 Dec05 ? 00:00:00 svnserve -d -r /opt/svndata/grape/
???root 16867 16838 0 19:53 pts/0 00:00:00 grep svn
???[root@localhost ~]#
说明:第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。
???实例2:查找指定进程个数
???命令:
复制代码
???
代码如下:
ps -ef|grep svn -c
???ps -ef|grep -c svn
输出:
复制代码
???
代码如下:
[root@localhost ~]# ps -ef|grep svn -c
???2
???[root@localhost ~]# ps -ef|grep -c svn
???2
???[root@localhost ~]#
实例3:从文件中读取关键词进行搜索
???命令:cat test.txt | grep -f test2.txt
???输出:
复制代码
???
代码如下:
[root@localhost test]# cat test.txt
???hnlinux
???peida.cnblogs.com
???ubuntu
???ubuntu linux
???redhat
???Redhat
???linuxmint
???[root@localhost test]# cat test2.txt
???linux
???Redhat
???[root@localhost test]# cat test.txt | grep -f test2.txt
???hnlinux
???ubuntu linux
???Redhat
???linuxmint
???[root@localhost test]#
说明:
输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行
???实例3:从文件中读取关键词进行搜索 且显示行号
???命令:cat test.txt | grep -nf test2.txt
???输出:
复制代码
???
代码如下:
[root@localhost test]# cat test.txt
???hnlinux
???peida.cnblogs.com
???ubuntu
???ubuntu linux
???redhat
???Redhat
???linuxmint
???[root@localhost test]# cat test2.txt
???linux
???Redhat
???[root@localhost test]# cat test.txt | grep -nf test2.txt
???1:hnlinux
???4:ubuntu linux
???6:Redhat
???7:linuxmint
???[root@localhost test]#
说明:
输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号
???实例5:从文件中查找关键词
???命令:grep 'linux' test.txt
???输出:
复制代码
???
代码如下:
[root@localhost test]# grep 'linux' test.txt
???hnlinux
???ubuntu linux
???linuxmint
???[root@localhost test]# grep -n 'linux' test.txt
???1:hnlinux
???4:ubuntu linux
???7:linuxmint
???[root@localhost test]#
实例6:从多个文件中查找关键词
???命令:grep 'linux' test.txt test2.txt
???输出:
复制代码
???
代码如下:
[root@localhost test]# grep -n 'linux' test.txt test2.txt
???test.txt:1:hnlinux
???test.txt:4:ubuntu linux
???test.txt:7:linuxmint
???test2.txt:1:linux
???[root@localhost test]# grep 'linux' test.txt test2.txt
???test.txt:hnlinux
???test.txt:ubuntu linux
???test.txt:linuxmint
???test2.txt:linux
???[root@localhost test]#
说明:多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上":"作为标示符
???实例7:grep不显示本身进程
???命令:
复制代码
???
代码如下:
ps aux|grep /[s]sh
???ps aux | grep ssh | grep -v "grep"
输出:
复制代码
???
代码如下:
[root@localhost test]# ps aux|grep ssh
???root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd
???root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: a href="mailto:root@pts/0"root@pts/0/a
???root 16901 0.0 0.0 61180 764 pts/0 S+ 20:31 0:00 grep ssh
???[root@localhost test]# ps aux|grep /[s]sh]
???[root@localhost test]# ps aux|grep /[s]sh
???root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd
???root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: a href="mailto:root@pts/0"root@pts/0/a
???[root@localhost test]# ps aux | grep ssh | grep -v "grep"
???root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd
???root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: a href="mailto:root@pts/0"root@pts/0/a
实例8:找出已u开头的行内容
???命令:cat test.txt |grep ^u
???输出:
复制代码
???
代码如下:
[root@localhost test]# cat test.txt |grep ^u
???ubuntu
???ubuntu linux
???[root@localhost test]#
实例9:输出非u开头的行内容
???命令:cat test.txt |grep ^[^u]
???输出:
复制代码
???
代码如下:
[root@localhost test]# cat test.txt |grep ^[^u]
???hnlinux
???peida.cnblogs.com
???redhat
???Redhat
???linuxmint
???[root@localhost test]#
实例10:输出以hat结尾的行内容
???命令:cat test.txt |grep hat$
???输出:
复制代码
???
代码如下:
[root@localhost test]# cat test.txt |grep hat$
???redhat
???Redhat
???[root@localhost test]#
实例11:
???命令: ifconfig eth0|grep "[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}"
???输出:
复制代码
???
代码如下:
[root@localhost test]# ifconfig eth0|grep "[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}"
???inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0
???[root@localhost test]# ifconfig eth0|grep -E "([0-9]{1,3}/.){3}[0-9]"
???inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0
???[root@localhost test]#
实例12:显示包含ed或者at字符的内容行
???命令:cat test.txt |grep -E "ed|at"
???输出:
复制代码
???
代码如下:
[root@localhost test]# cat test.txt |grep -E "peida|com"
???peida.cnblogs.com
???[root@localhost test]# cat test.txt |grep -E "ed|at"
???redhat
???Redhat
???[root@localhost test]#
实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行
???命令:grep '[a-z]/{7/}' *.txt
???输出:
复制代码
???
代码如下:
[root@localhost test]# grep '[a-z]/{7/}' *.txt
???test.txt:hnlinux
???test.txt:peida.cnblogs.com
???test.txt:linuxmint
???[root@localhost test]#
Linux系统中grep命令如何使用?常用参数有哪些?
进行Linux系统维护的时候,想要在文本中快速搜索到你需要的东西,grep命令是非常不错的选择,它主要用于查找文件里符合条件的字符串,从而节省时间、提高工作效率。那么Linux系统中grep命令如何使用?我们一起来看看详细的内容介绍。
Linux grep命令用于查找文件里符合条件的字符串。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为-,则grep指令会从标准输入设备读取数据。
语法
grep
[-abcEFGhHilLnqrsvVwxy][-A
][-B
][-C
][-d
][-e
][-f
][--help][范本样式][文件或目录...]
参数
-a或--text:不要忽略二进制的数据。
-A
或--after-context=
:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b或--byte-offset:在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B
或--before-context=
:除了显示符合样式的那一行之外,并显示该行之前的内容。
-c或--count:计算符合样式的列数。
-C
或--context=
或-
:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d
或--directories=
:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e
或--regexp=
:指定字符串做为查找文件内容的样式。
-E或--extended-regexp:将样式为延伸的正则表达式来使用。
-f
或--file=
:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F或--fixed-regexp:将样式视为固定字符串的列表。
-G或--basic-regexp:将样式视为普通的表示法来使用。
-h或--no-filename:在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H或--with-filename:在显示符合样式的那一行之前,表示该行所属的文件名称。
………………
参数较多,就不为大家一一讲解了!
规则文件>
规则文件>
范本样式>
范本样式>
动作>
动作>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
范本文件>
范本样式>
进行动作>
显示列数>
显示列数>
显示行数>
grep对匹配结果取反,加什么参数?
grep对匹配结果取反: grep -v "pattem" file > file2。\x0d\x0a grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。\x0d\x0a\x0d\x0a egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。\x0d\x0a grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。\x0d\x0a grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。\x0d\x0a Grep命令中允许指定的串语句是一个规则表达式,这是一种允许使用某些特殊键盘字符的指定字符串的方法,这种方法中的特殊键盘字符可以用于代表其他字符也可以进一步定义模式匹配工作方式。例如:grep ".*hood" essay1。该命令将在文件essay1中搜索,显示出包含带有字符串hood的字的每一行。命令行中的点表示的是hood之前可以有任意字符,星号指的是在字符串之前点号所表示的任意字符可以有任意个(其中的双引号是可有可无的,但是当语句中包含短语或者空格时就必须加双引号)。\x0d\x0a
grep语法
如果谈论计算机操作命令的grep, 语法与操作系统有关,对于 unix, linux 则是
grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法: grep [-abcEFGhHilLnqrsvVwxy][-A
][-B
][-C
][-d
][-e
][-f
][--help][范本样式][文件或目录...]
详细语法可查系统帮助文件,这里写不下。
例子: grep -i apple fruitlist.txt 意思是从文件水果表里,把词苹果找出来。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是给予的文件名为-,则grep指令会从标准输入设备读取数据。
语法
grep[-abcEFGhHilLnqrsvVwxy][-A
][-B
][-C
][-d
][-e
][-f
][--help][范本样式][文件或目录...]
参数
-a或--text:不要忽视二进制的数据。
-A
或--after-context=
:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b或--byte-offset:在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B
或--before-context=
:除了显示符合样式的那一行之外,并显示该行之前的内容。
-c或--conunt:计算符合样式的列数。
-C
或--context=
或-
:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d
或--directories=
:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e
或--regexp=
:指定字符串做为查找文件内容的样式。
-E或--extended-regexp:将样式为延伸的正则表达式来使用。
-f
或--file=
:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F或--fixed-regexp:将样式视为固定字符串的列表。
-G或--basic-regexp:将样式视为普通的表示法来使用。
-h或--no-filename:在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H或--with-filename:在显示符合样式的那一行之前,表示该行所属的文件名称。
-i或--ignore-case:忽略字符大小写的差别。
-l或--file-with-matches:列出文件内容符合指定的样式的文件名称。
-L或--files-without-match:列出文件内容不符合指定的样式的文件名称。
-n或--line-number:在显示符合样式的那一行之前,标示出该行的列数编号。
-o或--only-matching:只显示匹配PATTERN部分。
-q或--quiet或--silent:不显示任何信息。
-r或--recursive:此参数的效果和指定"-d recurse"参数相同。
-s或--no-messages:不显示错误信息。
-v或--invert-match:显示不包含匹配文本的所有行。
-V或--version:显示版本信息。
-w或--word-regexp:只显示全字符合的列。
-x--line-regexp:只显示全列符合的列。
-y:此参数的效果和指定"-i"参数相同。
规则文件>
规则文件>
范本样式>
范本样式>
动作>
动作>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
范本文件>
范本样式>
进行动作>
显示列数>
显示列数>
显示行数>
范本文件>
范本样式>
进行动作>
显示列数>
显示列数>
显示行数>
grep 命令详解
grep: Gloabal Search Regular Expression and Print out the line,意为全局搜索正则表达式并打印文本行。所以
之后也会从这两个大的方面来详细介绍。grep命令的基本语法如下:
[options]表示选项,具体的命令选项见下表。pattern表示要匹配的模式(包括目标字符串、变量或者正则表达式),file表示要查询的文件名,可以是一个或者多个。pattern后面所有的字符串参数都会被理解为文件名。
首先介绍一下我的实验环境,在/home/tyrone下建立3个简单的txt文件:
(1)多文件查询,file之间用空格隔开
(2)多模式匹配,模式之间为“逻辑或”的关系,匹配任意一个
(3)多模式匹配,模式之间为“逻辑与”的关系,匹配所有模式。
这个问题我查阅了很多方法,并逐一试验了一下。基本思想大致相同:先匹配一个模式,然后grep下面一个模式,将前一次grep的结果作为要查询文件路径依次向后传递。
注意:前一次grep的结果必须加上-l选项,否则会把匹配成功的文件内容作为要查询的文件名向后传递 。
我希望做到的是能够显示出同时包含模式的文件,并且跟随显示匹配每个模式的内容。可惜我现在找到的方法都仅仅能够显示匹配最后一个模式的内容。
最后不得不感慨一下linux命令的组合方式,能像积木一样堆积出无穷的组合,是时候展现真正的想象力了。。。
(4)查找指定用户的进程 ps是查看当前进程的指令,e表示所有进程,f表示全格式。
现在要搞一个脚本把前面总结的命令一锅炖了。先搜索同时匹配多个模式的文件,把它们先备份之后,替换目标字符串:
grep与正则表达式的故事
grep命令的由来可以追溯到UNIX诞生的早期,在UNIX系统中,搜索的模式被称为正则表达,为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀global,一旦找到相匹配的内容,用户就像将其输出到屏幕上,而将这一系列的操作整合到一起就是global regular expressions print,而这也就是grep命令的全称。
grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。
正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式。正则表达式可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符。为了进一步定义一个搜索模式,grep 命令支持如表 1 所示的这几种正则表达式的元字符(也就是通配符)。
grep命令的基本格式如下:
[root@localhost ~]# grep [选项] 模式 文件名
这里的模式,要么是字符(串),要么是正则表达式。
grep命令常用选项及含义:
-c:仅列出文件中包含模式的行数。
-i:忽略模式中的字母大小写。
-l:列出带有匹配行的文件名。
-n:在每一行的最前面列出行号。
-v:列出没有匹配模式的行。
-w:把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。
注意,如果是搜索多个文件,grep命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep命令的结果将显示每一个包含匹配模式的行。