1、正则表达式

通俗来讲,正则表达式是一种字符串的匹配方式,比如使用星号“*”来匹配任意的字符等。正则表达式实际上是一个匹配模板,当bash执行这个正则表达式时,就会将所有的输入数据与匹配模板匹配,匹配不成功的数据将会被过滤掉。

1.常用的元字符

字符

含义

举例

.

匹配除换行符以外的任意字符

\bhi\b.*\bLucy\b

\w

匹配字母或数字或下划线或汉字

\bhe\w

\s

匹配任意的空白符(包括空格制表符换页符)

\b

匹配单词的开始或结束

\bhi\b

^

匹配字符串的开始

^g.*d$

$

匹配字符串的结束

grep ‘d$’ test.ini

2.常用的限定符

字符

含义

举例

*

重复零次或更多次

grep ‘o*’tet.ini

+

重复一次或更多次

[0-9]+匹配1个或更多的数字

?

重复零次或一次

{n}

重复n

^9{2}$

{n,}

重复n次或更多次

{n,m}

重复nm

3.常用的反义代码

/语法

说明

\W

匹配任意不是字母,数字,下划线,汉字的字符

\S匹配任意不是空白符的字符\B匹配不是单词开头或结束的位置[^x]匹配除了x以外的任意字符[^aeIoU]匹配除了aeIoU这几个字母以外的任意字符

4.扩展正则表达式

字符

含义

举例

n,m

等同于基本正则表达式的\{n,m\}

egrep n 9{1,3} tmp

+

匹配前面一个字符出现一次或多次

egrep n go+d tmp

匹配前面一个字符出现零次或一次

egrep n go+d tmp

|

匹配逻辑或者,即匹配|前或后的字符串

egrep n adm|ftp tmp

egrep n (n|f)tp tmp

()

匹配正则集合

sed 's/\(root\)\(.*\)\(bash\)/\hei\2\hello/' tmp

2、sed工具

当用sed命令对文本进行处理的时候,sed先读取对象的文本文件的第一行到模式空间中。

当有内容进入模式空间时,sed的编辑命令对模式空间中的内容进行编辑操作(修改,替换,删除,追加,显示等等)

模式空间中的内容编辑处理完成之后,sed把此内容通过标准输出(默认为显示器)打印出来,并删除模式空间中的内容。

第一行处理结束。从新读取第二行的内容进行处理,直到最后一行。

2.1.sed基本语法

Sed [参数选项] {脚本指令} [输入文件]

2.2. sed的命令和选项:

命令

功能描述

a\

在当前行的后面加入一行或者文本。

c\

用新的文本改变或者替代本行的文本。

d

pattern space位置删除行。

i\

在当前行的上面插入文本。

h

拷贝pattern space的内容到holding buffer(特殊缓冲区)

H

追加pattern space的内容到holding buffer

g

获得holding buffer中的内容,并替代当前pattern space中的文本。(替换最后一行)

G

获得holding buffer中的内容,并追加到当前pattern space的后面。(追加到最后一行)

n

读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

p

打印pattern space中的行。 //小写

P

打印pattern space中的第一行。 //大写

q

退出sed

w file

写并追加pattern spacefile的末尾。

!

表示后面的命令对所有没有被选定的行发生作用。sed '/ftp/!a hello' tmp

s/re/string

string替换正则表达式re

=

打印当前行号码。

替换标记

g

行内全面替换,如果没有g,只替换第一个匹配。

p

打印行。

x

互换pattern spaceholding buffer中的文本。 sed -e '/adm/h' -e '/ftp/x' tmp

y

把一个字符翻译为另一个字符(但是不能用于正则表达式)Sed ‘y/a/A/’ tmp

选项

-e

允许多点编辑。

-n

取消默认输出。

-f

直接将sed的动作写在一个文件内

-i

直接修改文件内容,而不是输出到终端

-r

Sed的扩展表达式的用法

2.2.1.新增

在某一行后面加入新内容

sed ‘/匹配项/a\新增项文件名

匹配某一行,在这行前面加入新内容

sed ‘/匹配项/i\新增项文件名

在某一行的后面加入新内容

sed ‘3a 新增项文件名

匹配某一行,在这行前面加入新内容

sed ‘3i 新增项文件名

匹配某一行,在某一行的后面读入某文件的内容

sed ‘/匹配项/r 新增文件文件名

匹配某一内容,并将该内容写到其他文件中

Sed ‘/匹配项/w 其他文件名文件名

删除所有空行并在每一行的后面增加一个空行

sed ‘/^$/d;G’ 文件名

匹配某一行,把这一行加到所有行的后面

sed ‘/匹配项/h;G’文件名

2.2.2.替换

匹配某一内容并将该行第一个该内容替换

sed ‘s/匹配项/替换项/’文件名

匹配某一内容并全部替换该内容

sed ‘s/匹配项/替换项/g’文件名

匹配某一内容,并将该行内的另一内容替换

sed ‘/匹配项1/s/匹配项2/替换项2/’文件名

匹配某一项,并将含有该内容的整行替换

sed ‘/匹配项/c\替换项’文件名

2.2.3.删除

删除第几行

sed ‘3d’文件名

sed ‘$d’文件名

匹配某一行并删除

sed ‘/匹配项/d’文件名

删除第几行到第几行

sed ‘2,5d’文件名

删除文中所有字母

sed ‘s/[a-zA-Z]//g’文件名

删除文中所有数字

sed ‘s/[0-9]//g’文件名

删除文中的基数行

sed '1~2d' tmp

注意:如果要直接修改文件,则加入参数-i

3、总结

本文主要整理了正则表达式与sed的基本用法,后续将继续整理awk的基本用法。

正则表达式与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个字符,后跟逗号.

返回
顶部