Day06笔记总结:grep与正则表达式

Title: grep与正则表达式
Date: 2018-04-08
Author: Alvin

一、描述

搜索符合条件的所有行,并将结果输出到STDOUT;
默认搜索匹配的PATTEN在行中的位置不确定。
二、常见用法
grep PATTEN FILE
//搜索匹配PATTEN字符串的所有行
//PATTEN:过滤条件,也叫搜索匹配条件
“root”        //字符串
“$USER”       //变量–>字符串
`whoami`      //命令–>执行结果–>字符串
grep -v PATTEN FILE
//搜索匹配不包含PATTEN符串的所有行
grep -n PATTEN FILE
//搜索结果加行号
//等价写法:cat -n FILE | grep PATTEN
grep -i PATTEN FILE
//PATTEN字符串忽略大小写
grep -o PATTEN FILE
//只搜索PATTEN字符串本身
grep -q PATTEN FILE
//静默执行,不显示结果
//等价写法:grep PATTEN FILE &> /dev/null
$?      0       //有包含PATTEN的行
$?      1       //无包含PATTEN的行
grep -A3 PATTEN FILE
//包含PATTEN字符串的后3行也做显示
grep -B3 PATTEN FILE
//包含PATTEN字符串的前3行也做显示
grep -C3 PATTEN FILE
//包含PATTEN字符串的前3行和后3行也做显示
grep PATTEN1 FILE | grep PATTEN2
//过滤同时包含PATTEN1和PATTEN2的所有行
grep -e PATTEN1 -e PATTEN2 FILE
//过滤包含PATTEN1或PATTEN2任意一个的所有行
grep -w WORDS FILE
//过滤包含WORDS单词的所有行
//在grep视角,
字母、数字、下划线:都属于单词的一部分
其他字符:视为单词的分隔符
grep -f PATTENLIST FILE
//先把PATTENLIST的内容识别成一个或多个PATTEN
PATTEN1 PATTEN2 […]
//然后过滤包含PATTEN1或PATTEN2或[…]任意一个的所有行
//等价写法:grep -e PATTEN1 -e PATTEN2 [-e […]] FILE
grep -E EXT_PATTEN FILE
//支持扩展的正则表达式
三、正则表达式(一):字符匹配
echo STRINGS | grep PATTEN
//用于字符匹配的特殊字符
.              //表示一个任意字符
\.             //转义字符,表示 . 本身
[.]            //中括号里面的 . 表示 . 本身,不需要转义
[xyz]          //取集合[x,y,z]中任意一个字符
[^xyz]         //取集合的补集中任意一个字符(不再包含x/y/z)
四、正则表达式(二):匹配次数
echo STRINGS | grep PATTEN
//用于匹配次数的特殊字符
c*             //表示字符c出现任意次数(零次/一次/多次)
.*             //表示任意一个字符出现任意次数(零次/一次/多次)
[a-z]*         //表示集合[a-z]闭区间中的任意一个字符出现任意次数(零次/一次/多次)
c\?            //表示字符c最多出现一次(零次/一次)
.\?            //表示任意一个字符最多出现一次(零次/一次)
[a-z]\?        //表示集合[a-z]闭区间中的任意一个字符最多出现一次(零次/一次)
c\+            //表示字符c至少出现一次(一次/多次)
.\+            //表示任意一个字符至少出现一次(一次/多次)
[a-z]\+        //表示集合[a-z]闭区间中的任意一个字符至少出现一次(一次/多次)
c\{16,\}       //表示字符c至少出现16次(16次/16+次)
c\{16,20\}    //表示字符c至少出现16次,但最多出现20次(16次/17次/18次/19次/20次)
c\{,20\}      //表示字符c最多出现20次(零次/一次/……/20次)
五、正则表达式(三):位置锚定
echo STRINGS | grep PATTEN
//用于位置锚定的特殊字符
^str          //表示以字符串str开头的行(行首)
str$          //表示以字符串str结尾的行(行尾)
^$            //表示完全的空行(无法过滤含有不可见字符的假空行)
^[:space:]*$  //表示包含空格键或Tab键的假空行和完全的空行(彻底过滤包含不可见字符的假空行)
\<word        //表示以字符串word为词首的单词(词首)
word\>        //表示以字符串word为词尾的单词(词尾)
\<word\>      //表示以字符串word为词首和词尾的单词(词首+词尾)
\bword\b      //界定符\b是单词的边界,表示把字符串word当做一个独立的单词(界定符)
//在grep视角,
字母、数字、下划线:都属于单词的一部分
其他字符:视为单词的分隔符
六、正则表达式(四):分组
echo STRINGS | grep PATTEN
//用于分组的特殊字符
\(str\)       //表示把字符串str整体当成一个分组
\(str\)\{3,\} //表示字符串分组str至少出现3次
\(str\).*\1   //等价写法: \(str\).*\(str\)
// \1 表示 \(str\) ,相当于字符串分组str
//表示把字符串分组str整体当作一个参考,在 .* 后必须出现一模一样的字符串分组str
//分组的匹配结果必须一样
\(str1\)\?.*\(str2\)\+\1.*\2
//等价写法: \(str1\)\?.*\(str2\)\+\(str1\)\?.*\(str2\)\+
// \1 代表 \(str1\)\? ,相当于字符串分组str1
// \2 代表 \(str2\)\+ ,相当于字符串分组str2
//表示把字符串分组str1整体当作一个参考,在 .* 后必须出现一模一样的字符串分组str1
//表示把字符串分组str2整体当作一个参考,在 .* 后必须出现一模一样的字符串分组str2
//分组的匹配结果必须一样
^\<\(word\)\>.*\1$
//等价写法: ^\<\(word\)\>.*\<\(word\)\>$
// \1 代表 \<\(word\)\> ,相当于字符串分组str
//表示把单词word当作一个参考,在 .* 后必须出现一模一样的单词word
//在grep视角,
字母、数字、下划线:都属于单词的一部分
其他字符:视为单词的分隔符
//分组的匹配结果必须一样
a\|b          //表示字符a或者字符b
^\(str1\|str2\)

//表示以字符串str1或者字符串str2作为行首

-EOF-

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95429

(0)
M30-Alvin阿峰M30-Alvin阿峰
上一篇 2018-04-08 17:07
下一篇 2018-04-08 17:11

相关推荐

  • sed的用法

    sed是一种流编辑器,它一次处理一行内容。 处理时,把当前处理的行存储在临时缓冲区(pattern space),同时输出到屏幕,接着用sed命令处理缓冲区中的内容,接着读取下一行,这样不断重复,直到文件末尾。 用法: sed -[options] [操作] inputfile -n:不输出模式空间内容到屏幕,即不自动打印 -e: 多点编辑 -f:/PATH…

    2018-04-22
  • DNS服务

    1、相关原理概念
    2、配置主DNS服务器
    3、配置从DNS服务器

    2018-06-03
  • linux基础篇

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │ └── grub
    ├── dev
    ├── etc
    │ ├── rc.d
    │ │ └── init.d
    │ └── sysconfig
    │ └── network-scripts
    ├── lib
    │ └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │ └── local
    │ ├── bin
    │ └── sbin
    └── var
    ├── lock
    ├── log
    └── run

    2018-05-20
  • 基于lamp(源码)搭建blog

    lamp架构搭建blog(源码) 安装环境:2台主机,centos7.5 host1:192.168.67.115   httpd php host2:192.168.67.111   mariadb 安装包: apr-1.6.3.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.33.tar.bz2 php-7.1.18.tar…

    2018-07-02
  • yum

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而…

    2018-04-20
  • 第二周作业

    第二周作业 一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 pwd:  显示当前的工作目录 -P 显示真实物理路径 -L 显示链接路径(默认)   cd:  改变目录 使用绝对路径或者相对路径: cd /root/Desktop  cd Desktop/ 切换至父目录: cd .. 切换至当前用户主目录: cd 切换至…

    2018-07-06