正则表达式与grepsed工具使用简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式与grepsed工具使用简介相关的知识,希望对你有一定的参考价值。


正则表达式与grep、sed工具使用简介


一、正则表达式

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

其介绍如下:

    

\将下一个字符标记符、或一个向后引用、或一个八进制转义符^匹配输入字符串的开始位置$匹配输入字符串的结束位置*匹配前面的子表达式任意次
+匹配前面的子表达式一次或多次(大于等于1次)匹配前面的子表达式零次或一次{n}

n是一个非负整数

匹配确定的n次

{n,}

n是一个非负整数
至少匹配n次

{n,m}

m和n均为非负整
数其中n<=m。最少匹配n次且最多匹配m次

.匹配除“\r\n”之外的任何单个字符x|y匹配x或y[xyz]字符集合。匹配所包含的任意一个字符
[^xyz]

负值字符集
合匹配未包含的任意字符

[a-z]字符范围。匹配指定范围内的任意字符[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符[A-Z]大写字母集
( )定义组,可以用\1、\2等引用\b匹配一个单词边界\B匹配非单词边界 \d匹配一个数字字符
\D匹配一个非数字字符\n匹配一个换行符\r匹配一个回车符\s匹配任何不可见字符
\S匹配任何可见字符\t匹配一个制表符\v匹配一个垂直制表符\w匹配包括下划线的任何单词字符
\W匹配任何非单词字符\f匹配一个换页符




二、grep介绍与用法

    grep 是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。建议使用egrep(egrep=grep -E)

    grep的选项:

    -n 显示行号

    -o 只显示匹配的内容

    -q 没有任何输出,即静默模式

    -I 如果匹配成功只将文件名打印出来

    -A 2 如果匹配成功将其后两行一起打印出来不带数字打印一行

    -B 2 如果匹配成功将其前两行一起打印出来不带数字打印一行

    -C 2 如果匹配成功将其前后两行一起打印出来不带数字打印一行

    --color 带颜色打印

    -c count即将匹配到的行数打印出来

    -E 相当于egrep

    -i 不区分大小写

    -v 取反,即不匹配

    -w 匹配单词

    

练习:

    目标文件/etc/passwd,使用grep命令或egrep

1.显示出所有含有root的行:

技术分享

2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:

 技术分享

3.  显示出有多少行含有nologin。

技术分享

4.显示出那些行含有root,并将行号一块输出。

技术分享

5.显示出文件

技术分享

6.新建用户

abominable

abominate

anomie

atomize

编写正则表达式,将他们匹配出来

技术分享

7.建四个用户

Alex213sb

Wpq2222b

yH438PIG

egon666

egon

            过滤出用户名组成是字母+数字+字母的行

技术分享

8.显示出/etc目录下所有包含root的文件名


9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行

技术分享


三、sed的介绍与用法

    sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    sed [-nefr] [command]

选项与参数:

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在命令列模式上进行 sed 的动作编辑;

-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;

-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i :直接修改读取的文件内容,而不是输出到终端。


command:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

d :删除,因为是删除啊,所以 d 后面通常不接任何东西

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s :取代,可以直接进行替换的功能,通常这个 s 的动作可以搭配正规表示法 例如 1,20s/旧字符串/新字符串/g 


练习:

    

以/etc/passwd文件为模板


1,删除文件每行的第一个字符。

技术分享

2,删除文件每行的第二个字符。

技术分享

3,删除文件每行的最后一个字符。

技术分享

4,删除文件每行的倒数第二个字符。

技术分享

5,删除文件每行的第二个单词。

技术分享

6,删除文件每行的倒数第二个单词。

技术分享

7,删除文件每行的最后一个单词。

技术分享

8,交换每行的第一个字符和第二个字符。

技术分享

9,交换每行的第一个字符和第二个单词。

技术分享

10,交换每行的第一个单词和最后一个单词。

技术分享

11,删除一个文件中所有的数字。

技术分享

12,删除每行开头的所有空格。

技术分享

13,用制表符替换文件中出现的所有空格。

技术分享

14,把所有大写字母用括号()括起来。

技术分享

15,打印每行3次。

技术分享

16,只显示每行的第一个单词。

技术分享

18,用命令获取格式为    mm/yy/dd    的日期格式,结合管道,将其换成   mm;yy;dd格式

技术分享

以上是关于正则表达式与grepsed工具使用简介的主要内容,如果未能解决你的问题,请参考以下文章

grep文本搜索工具与正则表达式

grep与正则表达式使用

Python 正则表达式模块 (re) 简介

正则表达式简介

正则表达式笔记

Day08_固化命令grepsed及awk命令