linux中使用grep命令详解

Linux grep命令

Linux grep命令用于查找文件里符合条件的字符串;也可以用于查找内容包含指定的范本样式的文件。它能使用正则表达式搜索,用于在文件中搜索指定的字符串模式,列出含有匹配模式子符串的文件名,并输出含有该字符串的文本行。

grep的工作方式是这样的:它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

基本语法:

grep [options] pattern [files]

[options]的主要参数:

-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 : 在显示符合样式的那一行之前,标示出该行的列数编号。

-o 或 --only-matching : 只显示匹配PATTERN 部分。

-q 或 --quiet或--silent : 不显示任何信息。

-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。

-s 或 --no-messages : 不显示错误信息。

-v 或 --revert-match : 显示不包含匹配文本的所有行。

-V 或 --version : 显示版本信息。

-w 或 --word-regexp : 只显示全字符合的列。

-x --line-regexp : 只显示全列符合的列。

-y : 此参数的效果和指定"-i"参数相同。

-?:同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

pattern正则表达式主要参数:

\:忽略正则表达式中特殊字符的原含义。

^:匹配正则表达式的开始行。

$:匹配正则表达式的结束行。

\<:从匹配正则表达式的行开始。

\>:到匹配正则表达式的行结束。

[]:单个字符,如[A]即A符合要求。

[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。

.:所有的单个字符。

*:有字符,长度可以为0。

代码示例:

示例1:在当前目录中,查找前缀有“test”字样的文件中包含“test”字符串的文件,并打印出该字符串的行,此时,可以使用如下命令:

grep test test*

输出:

testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行 

testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行 

testfile_2:Linux test #列出testfile_2 文件中包含test字符的行

示例2:反向查找,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含test 的文件中不包含test 的行

grep -v test *test*

输出:

testfile1:helLinux! 

testfile1:Linis a free Unix-type operating system. 

testfile1:Lin 

testfile_1:HELLO LINUX! 

testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM. 

testfile_1:THIS IS A LINUX TESTFILE! 

testfile_2:HELLO LINUX! 

testfile_2:Linux is a free unix-type opterating system.
(0)

相关推荐

  • Linux下删除乱码或特殊字符文件的方法讲解

    由于编码原因,在linux服务器上上传.创建中文文件或目录时,会产生乱码,如果想删除它,用rm命令是删除不了的,这种情况下,用find命令可以删除乱码的文件或目录. 在linux文件系统中,每个文件都有一个i节点号,可以通过i节点号来管理文件.首先进入乱码文件或目录所在的目录 使用ls -i命令找到文件或目录的inode, 文件或目录前面的数字字符串就是inode,接下来使用find命令查询并且删除此文件或目录. 注意:此方法只适用于删除文件或空的文件夹. 非空文件夹怎么删除呢? 首先也是先查i

  • Linux Shell在目录下使用for循环结合if查找文件的巧用

    1.for循环对目录做遍历,if判断文件是否为要查找的文件. 示例1: #!/bin/bash if [ $# -lt 1 ];then echo "Usage:$0 + filepath" exit fi #判断用户是否输入了参数 match=$1 #将要查的文件赋值给变量match found=0 #定义一个初始变量作为发生条件,当文件找到时对此变量重新赋值 for file in /etc/* #对目录进行遍历 do if [ $file == $match ];then #判断

  • 一道题理解Linux中sort命令的多个参数

    sort命令很常用,但参数也很多,比如: -o, -n, -u, -r一时也未必能想起如何使用. 这里有一道题,可以很好的结合使用上面的参数,达到很好记忆的效果. 题目: 数据文件data中含以下数据: 4 1 3 5 1001 2 4 5 请用一条命令反向排序,去重并将这些数据同样保存在data文件中.最终输出结果: 1001 5 4 3 2 1 要达到上面的三条要求,就要同时借助于上面的几个参数,具体命令如下: [root@localhost ~]# cat data | sort -nur

  • Linux获取当前脚本真实路径的方法

    1.获取当前脚本的真实路径: #!/bin/bash if [[ $0 =~ ^\/.* ]] #判断当前脚本是否为绝对路径,匹配以/开头下的所有 then script=$0 else script=$(pwd)/$0 fi script=`readlink -f $script` #获取文件的真实路径 script_path=${script%/*} #获取文件所在的目录 realpath=$(readlink -f $script_path) #获取文件所在目录的真实路径 echo $sc

  • Linux关于透明大页的使用与禁用介绍

    引言 随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存"分页机制"提出之始,内存页面的默认大小便被设置为 4096 字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的 4KB 页面. 4KB 大小的页面在"分页机制"提出的时候是合理的,因为当时的内存大小不过几十兆字节,然而当物理内存容量增长到几 G 甚至几十 G 的时候,操作系统仍然以 4KB 大小为页面

  • Linux下升级python和安装pip的详解

    Linux版本升级: 1.首先确认Linux操作系统中自带的python 版本时候与自己所需要的版本一致 所有的python版本都在https://www.python.org/ftp/python/ 选择下载 2. wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz 进行下载 3.解压 tar -zxvf Python-2.7.11.tgz 进入Python-2.7.11目录  输入 ./configure make

  • Linux文本处理命令sort详解

    sort  对文本文件内容进行排序 用法:sort +选项 +文件名(可跟多个文件) 示例1:cat 1.txt sort 1.txt    #文字,默认按字母a-z排序 实示例2:cat  2.txt sort 2.txt  #数字,默认按1-9排序 -n 参数:sort -n 2.txt  #加-n,把数字从小到大排序 -r 参数:sort -n -r 2.txt #-r ,倒序排序(也适用于文字) 如果一个文本有两列内容,默认按第一列排序,示例:cat 3.txt sort 3.txt 

  • linux使用lsof命令查看文件打开情况

    前言 我们都知道,在linux下,"一切皆文件",因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof. linux下有哪些文件 在介绍lsof命令之前,先简单说一下,linux主要有哪些文件: 普通文件 目录 符号链接 面向块的设备文件 面向字符的设备文件 管道和命名管道 套接字 以上各类文件类型不多做详细介绍. lsof命令实用用法介绍 lsof,是list open files的简称.它的参数很多,但是我们这里只介绍一些实用的

  • Linux设置虚拟内存的教学与实战教程

    什么是虚拟内存? 先直接摘抄一段 wikipedia 上的介绍. 虚拟内存是计算机系统内存管理的一种技术.它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换. 对于 C 语言里面的变量,我们可以使用 & 运算符来获得其地址, 既然是虚拟地址,就是指这个地址是虚拟的. 虚拟地址机制不是必须的,在简单的单片机中,编写的代码编译时都需要指定物理 RAM 空间分布,不会有虚拟地址的概念,

  • Linux文本查找命令find的用法详解

    find 命令主要用于查找目录和文件,可以指定多种参数进行匹配. 用法:find  +查找路径  +命令参数   [输出形式] 查找路径:告诉find在哪查找 命令参数:指定要查找的文件属性,属性包括多种,类型.名称.大小.修改时间等等 常用的参数: -name 按文件名进行查找 -user 按照文件的属主进行查找 -mtime  按照文件的更改时间来查找,-n 表示文件修改时间距今天n天以内,+n 表示文件修改时间距今天n天以前 -type  按照文件的类型查找,d 表示目录, f表示文件 ,

随机推荐