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


一、正则表达式

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

其介绍如下:

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

n是一个非负整数

匹配确定的n次

{n,}

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

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

正则表达式与grep、sed工具使用简介的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  4. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  5. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  6. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  7. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  8. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

  9. ios – 创建一个包含n个空格或其他重复字符的字符串

    我想使用Swift使用n个空格进行字符串,但不使用for循环或手动如下所示:解决方法String已经有一个repeating:count:initializer就像Array(和其他采用RangeReplaceableIndexable协议的集合):所以你可以打电话:请注意,重复的参数是一个字符串,而不仅仅是一个字符,因此您可以重复整个序列:编辑:更改为Swift3语法,并删除了关于Swift1类

  10. ios – 如何使用Unicode十六进制值(UTF-16)在Swift中表达字符串

    我想在Swift中使用十六进制值编写一个Unicode字符串.我已经阅读了字符串和字符的documentation,所以我知道我可以使用特殊的Unicode字符直接在字符串如下:版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部