正则表达式定义:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。

“^”表示行的开始,“^#”表示以#开始的行。“$”表示行的结尾,“#$”表示以#结尾的行。“^$”表示空行。

“[ ]”中括号内为字符组合,代表字符组合中的任意一个,“[0-9a-zA-Z]”表示任一数字或大小写字母。“[^a-z]”表示不在a-z字符内的任一字符。

“.” 表示任意一个字符。“*”表示零个或多个前面的字符。“.*”表示零个或多个任意字符。“?”表示零个或一个前面的字符。“+”表示一个或多个前面的字符。

“{n }”表示n个前面的字符。“{n1,n2 }”表示n1到n2个前面的字符,其中n1<n2。“{n,}”表示至少n个前面的字符。使用时要在括号前加上脱意字符,如:“\{n\}”。

“( )”表示一个整体,“(aa)+”表示一个或多个aa。

“aaa|bbb”表示字符串aaa或者字符串bbb。


grep和egrep的用法:

egrep是grep的加强版,除了具有grep所有功能外,还可使用“+”,“?”,“|”,“( )”等字符,grep要使用这些字符要加脱意字符“\”。

-c:打印符合要求的行数。

-i:忽略大小写。

-n:输出符合要求的行及其行号。

-v:打印不符合要求的行。

-A:后面跟一个数字n,有无空格都可以,表示打印符合要求的行以及下面n行。

-B:后面跟一个数字n,有无空格都可以,表示打印符合要求的行以及上面n行。

-C:后面跟一个数字n,有无空格都可以,表示打印符合要求的行以及上下各n行。

例子:

grep -C2 'aaa' file:将文件file含字符串aaa的行及其上下各两行都打印出来。

grep -nv 'aaa' file:将文件file不含字符串aaa的行打印,并输出行号。

grep -v '^#' file | grep -v '^$':将文件file所有不以#开头的行且非空行打印输出。

grep -v '[0-9]' file:将文件file所有不含数字的行打印。包括空行。

grep '[^0-9]' file:将文件file所有含非数字字符的行打印。空行不含字符,所以不包括空行。

grep '^[^a-zA-Z]' file:将文件file所有以非大小写字母开头的行打印。不包括空行。

grep '[^a-zA-Z]' file:将文件file所有含非大小写字母字符的行打印。不包括空行。

grep 'a..d' file:将文件file中含有a..d的行打印。a..d表示a和d中间有两个任意字符。

grep '.*' file:打印文件file所有行。包括空行。

grep 'a\{2\}' file:将文件file中含有字符串aa的行打印。

egrep 'a+' file:将文件file中含有一个或多个a的字符串的行打印。

egrep 'a?' file:将文件file中含有零个或一个a的字符串的行打印。

egrep 'aaa|bbb|ccc' file:将文件file中含字符串aaa或bbb或ccc的行打印。符合多个条件的只打印一次。

egrep '(aaa)+' file:将文件file中含有一个或多个aaa的字符串的行打印。


sed的用法:


-n:取消默认输出。

-e:实现多个编辑行为。

-i:直接修改原文件内容。

例子:

sed -n 'n1,n2'p file:打印文件file的第n1行到第n2行,其中p表示打印,最后一行用$表示。

sed -n '/aaa/'p file:打印文件file中包含字符串aaa的行。

sed -e 'n'p -e '/aaa/'p -n file:打印文件file的第n行,打印含有字符串aaa的行。执行顺序是依次扫描每一行,若该行符合第一个条件则打印一次,若其符合第二个条件则再打印一次。直至行末。

sed 'n1,n2s/aaa/bbb/g' file:将文件file第n1行至第n2行中所有的字符串aaa替换为字符串bbb。其中s表示替换,g表示本行全局替换,如果不加g则只替换本行出现的第一个。分隔符除了用“/”还可以用其他特殊字符,如“#”和“@”。

sed 'n1,n2s/[a-zA-Z]//g' file:将文件file第n1行至第n2行中所有的字母滤除。

sed 's/\(aaa\)\(.*\)\(bbb\)/\3\2\1/' file:将文件file中同一行内的字符串aaa和bbb调换位置。小括号在sed中属于特殊符号,需在前面加脱意字符“\”。用小括号把要替换的字符串括成一个整体,替换时分别用\1,\2,\3代表第1,第2,第3个字符串所放的位置。

sed 's/^.*$/aaa&/' file:将文件file所有行前面加上字符串aaa。&用来保存被搜索的字符串,如s/love/**&**/,love这成**love**。

sed 's/.*a$//;s/^b.*//' file:将文件file中以a结尾的行或者以b开头的行滤除。执行顺序是依次扫描每一行,对该行依次进行第一个替换动作和第二个替换动作。

错误用法:

sed 'n1,n2/aaa/'d file:定位行号和筛选字符串的功能不可共用。

sed -n 'n1,n2/aaa/'p file:定位行号和筛选字符串的功能不可共用。

sed '13;/aaa/'p -n file:目前已知“;”仅能用在两个替换动作之间。


awk的用法:

用分隔符隔开的叫做字段,$0表示整行,$n表示第n字段,n>0。分隔符后面要用单引号括起,里面是筛选条件和处理动作,动作要用“{ }”括起,print表示打印动作,动作后面可以跟$0或$n或自定义的内容,跟多个$n要用逗号隔开,自定义的内容要用双引号括起。被筛选的字符串要用“//”括起。不加“{ }”来指定打印的内容时,默认打印符合“{ }”外条件的行。

awk中可以用逻辑符号进行判断,逻辑符号有:==,!=,>,>=,<,<=。例如“==”表示等于,即精确匹配。“!=”表示不匹配。若逻辑符号右侧是数字,加双引号的数字表示字符串,不加双引号的数字表示数学中的数字。若右侧是字符串,则必须加双引号。可以用“&&”和“||”在同一个awk语句中连接两个逻辑符号表达式,分别表示“并且”和“或者”。

awk有内置变量,常用的有NF和NR。NF表示用分隔符分隔后一共有多少字段,NR表示行号。

awk中可以使用if判断和for循环。

-F:指定分隔符,分隔符用单引号括起来,例如:-F ':'。如果不加该选项,则默认以空格或tab键为分隔符。如果使用awk更改了内存中的内容,那么打印时会以默认的空格为分隔符打印,可以用OFS=“分隔符”来指定分隔符。

例子:

head -n2 file |awk -F ':' '{print $1}':打印文件file前两行的第一字段。

awk '/aaa/' file:将文件file中含有字符串aaa的行打印。

awk -F ':' '$1 ~/aaa/' file:将文件file中第一个字段含有字符串aaa的行打印。“~”表示模糊匹配,只要包含就行。

awk -F ':' '/aaa/ {print $1,$2} /bbb/ {print $3,$4}' file:将文件file中含有字符串aaa的行的第一二个字段打印,含有字符串bbb的行的第三四个字段打印。执行顺序是依次扫描每一行,若该行符合第一个条件则打印一次,若其符合第二个条件则再打印一次。直至行末。

awk -F ':' '$1>=5' file:将文件file中第一个字段在数学上大于5的行打印。例如:23>5。

awk -F ':' '$1>="5"' file:将文件file中第一个字段在字符上大于5的行打印。例如:23<5。

awk -F ':' '$1>$2' file:将文件file中第一个字段在数字上大于第二个字段的行打印。

awk -F ':' '$1>"5" && $1<"7"' file:将文件file中第一个字段在字符上大于5且小于7的行打印。

awk -F ':' '$1>"5" || $7=="/bin/bash"' file:将文件file中第一个字段在字符上大于5或第七个字段为“/bin/bash”的行打印。

awk -F ':' '{print $NF}':将文件file中每行最后一个字段打印。

awk 'NR>20' file:将文件file中第20行之后的行打印。

awk -F ':' 'NR>20 && $1 ~ /aaa/' file:将文件file第20行之后且第一个字段含有字符串“aaa”的行打印。

awk -F ':' '$1="aaa"' file:将文件file中每行的第一个字段改为aaa并打印。

awk -F ':' '$8=$1+$2' file:将文件file中每行的第八个字段改为第一二个字段的和并打印。

awk -F ':' '{$8=$1+$2}' file:将文件file中每行的第八个字段改为第一二个字段的和,改变只会存于电脑内存中,不会打印出来。

awk -F ':' '{$8=$1+$2;print $0}' file:将文件file中每行的第八个字段改为第一二个字段的和并打印。

awk -F ':' '{(sum=sum+$1); END {print sum}' file:将文件file中每行的第一个字段求和并打印。END表示所有的行都已经执行。

awk -F ':' '{if($1=="aaa") print $0}' file:将文件file中第一个字段为aaa的行打印。

正则表达式和grep,sed,awk的更多相关文章

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

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

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

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

  3. UITableViewCellAccessoryCheckmark涵盖iOS 7上的单元格分隔符

    在iOS7上使用此代码会导致分隔符视图被覆盖或缩短:如何修复分隔符视图?

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

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

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

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

  6. ios – 页脚视图的颜色总是比UITableView分隔符的颜色更暗

    在我的UITableView中,我设置了这样的分隔符颜色:我像这样设置页脚的颜色:但是,页脚视图的颜色总是比分隔符的颜色更暗,如下所示:如何让它们成为完全相同的颜色?谢谢.解决方法从iOS6.0开始,您可以使用下面提到的UITableView的委托方法来更改页脚视图的背景颜色–

  7. ios – 使用NSLayoutConstraint垂直居中两个视图

    解决方法通过这样做,我能够做到这一点:棘手的部分是恒定值.该值是所有视图高度的一半,包括它们的分隔符.这意味着,如果imageview的高度为360,按钮的高度为70,分隔符为60,则该常量将为/2=245.确实应该有一种更聪明的方式,但是现在我觉得这没关系.

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

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

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

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

  10. ios – 可以增加UITableView分隔线的厚度吗?

    我看到无处不在试图增加这条线的厚度.有没有办法以编程方式做这个?

随机推荐

  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个字符,后跟逗号.

返回
顶部