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

简介:

正则表达式与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的行:

wKiom1jSL_6TGCRqAAAx-no2niI418.png-wh_50

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

 wKiom1jSMHXzmbrJAAA-17DzkDA224.png-wh_50

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

wKioL1jSMNiiak_HAAARpJxHOUc363.png-wh_50

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

wKiom1jSMQfxfbrdAAAgN8cR_o4467.png-wh_50

5.显示出文件

wKiom1jSMTGiKMgaAAAVPgt98Ws567.png-wh_50

6.新建用户

abominable

abominate

anomie

atomize

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

wKioL1jSN0jRB9AlAAA_w5Wty98229.png-wh_50

7.建四个用户

Alex213sb

Wpq2222b

yH438PIG

egon666

egon

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

wKioL1jSOhjwBbNzAABAqY3BcEc459.png-wh_50

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


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

wKioL1jSRHSAG4GAAADHHVonvrE061.png-wh_50


三、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,删除文件每行的第一个字符。

wKiom1jSU62gM58vAADGkdQovMQ626.png-wh_50

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

wKioL1jSVI2zd0_vAABuH8bOZ5w952.png-wh_50

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

wKiom1jSVN7S4ud1AABvkye9-v8056.png-wh_50

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

wKiom1jSVS6hFnePAABu7IvACms779.png-wh_50

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

wKioL1jSV4Kg0OOnAACaOWQadIM902.png-wh_50

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

wKiom1jSWImBgAYvAABj5IrLO8Y824.png-wh_50

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

wKiom1jSWLmx_lodAABuDNJuKb0028.png-wh_50

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

wKiom1jSWTbBdwjHAACABwuwLQM176.png-wh_50

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

wKiom1jSWrSyMpTdAADF-mnQ9lM044.png-wh_50

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

wKioL1jSXCeAz0kDAACENh54eRs829.png-wh_50

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

wKiom1jSXJPRROKVAACXrWSyK08675.png-wh_50

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

wKioL1jSXYrznwsKAABirmmWM4M205.png-wh_50

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

wKiom1jSXeLxV6oCAACLfMthc9o274.png-wh_50

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

wKioL1jSXruADo9-AAB_jw-X5Go111.png-wh_50

15,打印每行3次。

wKiom1jSYemQhYqtAACALRZjFHg155.png-wh_50

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

wKioL1jSYrTDD6a2AABCfp7fLfQ732.png-wh_50

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

wKiom1jSZ9HTkxLNAAAegeQb1hw583.png-wh_50



本文转自 AltBoy 51CTO博客,原文链接:http://blog.51cto.com/altboy/1909354

相关文章
|
6月前
|
Linux Perl
sed删除匹配正则表达式的行
sed删除匹配正则表达式的行
335 1
|
29天前
|
测试技术 Perl
一个提高效率的工具,正则表达式,值得学习一下!
一个提高效率的工具,正则表达式,值得学习一下!
|
5月前
|
监控 Unix Linux
强大的文本处理工具组合:egrep、正则表达式、awk、cut、xargs
了解Linux和Unix文本处理的关键工具:egrep(扩展正则表达式搜索)、正则表达式、awk(文本分析)、cut(剪切文本)和xargs(传递参数给命令)。这些工具组合使用可高效处理、分析大量数据,尤其在日志分析和文本查询中。例如,从Web服务器日志中查找404错误,先用egrep筛选,再用awk或cut提取IP和URL,最后用xargs配合其他命令执行操作。掌握这些工具能提升工作效率。
|
3月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
49 0
|
3月前
|
开发者 Ruby
Ruby正则表达式的奥秘:如何用简单的语法构建强大的文本匹配与处理工具?
【8月更文挑战第31天】正则表达式是文本匹配的强大工具,通过简单模式即可实现复杂文本处理。作为动态、面向对象的语言,Ruby提供了全面的正则表达式支持,涵盖创建、匹配、替换及分割等功能。本文通过示例代码介绍如何在Ruby中使用正则表达式进行文本匹配,并分享了编写正则表达式的最佳实践,帮助开发者提升文本处理效率与准确性,更好地利用这一工具构建高效系统。
30 0
|
6月前
|
机器学习/深度学习 Python
正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具
【5月更文挑战第12天】正则表达式是文本处理工具,Python的re模块支持其使用。元字符如.、*、+、?等在正则表达式中具有特殊含义,用于指定匹配规则。示例中,通过正则表达式模式匹配字符串中的电子邮件地址,并使用re.findall()找出所有匹配项。
69 4
|
6月前
|
Rust 监控 安全
【专栏】`ripgrep`(rg)是Linux下快速、内存高效的文本搜索工具,用Rust编写,支持PCRE2正则表达式
【4月更文挑战第28天】`ripgrep`(rg)是Linux下快速、内存高效的文本搜索工具,用Rust编写,支持PCRE2正则表达式。相比`grep`,它在处理大文件和复杂模式时更具优势。安装`rg`可通过软件包管理器,如在Debian系系统中使用`sudo apt install ripgrep`。基本用法包括简单搜索、递归搜索、忽略大小写、显示行号等。高级功能包括固定字符串搜索、多文件匹配、并行搜索、排除选项和区域搜索。适用于日志分析、代码审查等场景,是提升工作效率的利器。
515 4
|
6月前
|
机器学习/深度学习 Shell 开发工具
正则表达式 与文本三剑客(sed grep awk)
正则表达式 与文本三剑客(sed grep awk)
|
6月前
|
数据安全/隐私保护 Python
Python正则表达式:强大的文本处理工具
Python正则表达式:强大的文本处理工具
49 1
|
6月前
探索正则表达式:强大文本匹配与处理工具
探索正则表达式:强大文本匹配与处理工具