每日复习正则表达式

定义 & 工具

正则表达式:是在支持表达式的工具下, 对字符串进行的搜索,删除,替换
工具 : grep , awk, vi 等等

用法

grep -n 't[ae]st' test.txt 查看搜索 test,和 taste
grep -n '[^g]oo' test.txt 搜索不带 g开头并且是oo的
grep -n '[^a-z]oo' test.txt 本意是要搜索与带小写字母的,但是考虑到语系环境,有的环境是大小写字母切换的,所以使用 [:lower:]表示小写 所以 应该是grep -n '[^:lower:]oo' test.txt

[:alnum:] 代表大小写字母和数字
[:alpha:] 代表所有的大小写字母
[:blank:] 代表空格和 tab 键
[:cntrl:] 代表键盘上的控制键
[:digit:] 代表数字
[:graph:] 除了空格和tab的其他字符
[:lower:] 小写字母
[:print:] 任何可以被打印的字符
[:punct:] 代表标点符号
[:upper:] 代表大写字母
[:space:] 空格
[:xdigit:] 16进制数


grep -n '\.$' test.txt 小数点是特殊字符,所以要转义,查找.结尾的行
grep -n '^$'查找空白行
^ 表示行首( 没在 [] 内 )
$ 表示行尾
\$ 转义字符,将$转义成普通字符

 

. 小数点代表一定有一个任意字符
* 星号代表重复前一个 0 到无穷多次
grep -n 'g..d' test.txt

o* 因为 * 代表 0~ 无穷,也就是说,*前边的字符实际上是与*结合的字符,不具备实际意义,那么当*表示0的时候,如果只是'o*'可以被理解为空字符(即没有字符也可以),因为o与*结合了,所以如果搜索 grep -n 'o*' test.txt 就会把所有内容都搜索出来,如果想表示至少有一个o,并且连续的话,即, o, oo, ooo 等等,则 [oo*] 这样才是想要的结果, 同理,如果想搜索至少有2个o,则需要 [ooo*] 这样. grep -n 'ooo*' test.txt

 

{} 限定连续RE字符范围
grep -n 'go\{2,5\}g' grep.txt ( 其中 \ 为逃脱字符, 因为 { } 属于特殊字符, 需要逃脱使用 )
 
限定2个 grep -n 'o\{2\}' regular_express.txt   

限定2-5个 grep -n 'o\{2,5\}' regular_express.txt
 
限定2个以上 grep -n 'o\{2,\} regular_express.txt

注意,开头与结尾的限制,这个o也是没有实际意义的,说明是开头结尾限制呢,如果按照以上命令搜索,gooooooooo也会被搜索出来,奇怪?不是只显示2-5个o么?当正则表达式搜索时,的确是搜索了2-5个o,但是满足这个条件之后的,是否还是o,它不管,它只管从左到右有满足这个条件的,2-5个o就可以了,所以如果你需要自己增加开头结尾限制,比如 grep -n 'go\{2,5\}g' test.txt 这样,就是搜索g开头,中间有2-5个o,然后再跟g的这样的字符串。

 

sed工具  
sed本身也是一个管线命令,可以分析 standard input, 还可以将数据进行取代,删除,新增,截取特定行

sed [-nefr] [动作]

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

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

-f : 直接将 sed 的动作卸载一个档案内, -f filename

-r : sed 动作支持延伸正则表达式

n1,n2 function : n1,n2 不见得会存在,一般代表 选择进行动作的行数。例如 如果我的动作是需要在 10到 20之间进行的,则10,20 动作行为

function 包含以下内容

a : 新增,新增的内容会在目前的下一行出现

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

d: 删除 ,

i : 插入m i后面可以接字符串,会出现在目前行的上一行

p : 打印

s : 取代,一般形式为 1,20s/old/new/g 似成相识,因为跟学习 vi时一样

nl /etc/passwd | sed '2,5d' 删除2-5 行

sed '2a drink tea' 增加新行

nl /etc/passwd | sde '2,5c No 2-5 number'  替换

nl /etc/passwd | sed -n '5,7p'  打印5-7行,安静模式

 

sed '1,2c zz' test.txt

nl test.txt | sed '1,2c zz' 

以上两种方法都可以替换

同样,以下增加和删除还有 s级别替换也都可以类似以上两种方法

sed '1,2d' test.txt

sed '1,2a asdf' test.txt ( 在两行后边会增加 asdf, 显示的时候会另起一行,以方便查看,但实际上是在前两行末尾增加内容,而不是新增加行 ) 实际档案并未修改,只是显示时像修改

sed '1,2s/old/new/g'

 

综合例子 

grep -n 't[ae]st' regular.txt

grep -n '[^g]oo' regular.txt ( 如果第一个字符是 goo的也被搜索出来了 )

这句的含义是,找含有 oo前边不是g的就可以,那么 goooo满足 条件,后边两个o的前边不是 g,

grep -n '^[^g]oo' regular.txt ( 这样,上边多余的内容就不会被搜索出来 )

grep -n '[:alnum:]' regular.txt ( 全部数字和字母 )

grep -n '[:alpha:]' regular.txt ( 全部字母 )

grep -n '[:digit:]' regular.txt ( 全部数字 )

grep -n '[:lower:]' regular.txt ( 全部小写 )

grep -n '[:upper:]' regular.txt ( 全部大写 )

如果 ^ 不是放在 [] 这中间,表示 行头, $ 表示行尾 \ 转义字符

grep -n '\.$' regular.txt ( 查找以 . 结尾的行 )

grep -n '^\.' regular.txt ( 查找以 . 开头的行 )

以上2个,注意 ^ , $ 在字符串中的位置。

. 表示任意字符, *表示任意多个重复前边的字符( 前边仅挨着字符没有实际意义 )

grep -n 'g..d' regular.txt ( 查找出中间有2位的字符, 例如 good )

grep -n 'ooo*' regular.txt ( 查找出至少有 2 个 o 的字符, 例如 good , gooo )

{} 大括号的作用是限制重复个数

grep -n 'go\{2,5\}' regular.txt ( 注意这里需要转义字符,另外,在搜索的过程中,例如你想搜索的是 2-5个,但是,程序搜索时,发现一个字符串满足后,就显示出来,所以6个以上的o也有可能显示出来,所以需要一个尾符号, grep -n 'g\o\{2,5\}g' regular.txt

所以,以上{} 大括号,在使用时,一定要注意开头和结尾

grep -n 'go\{2\}g' regular.txt ( 2 个  g 中间有 2个 o )

grep -n 'go\{2,\}g' regular.txt ( 2个 g 中间有至少2个 o )

grep -n 'go\{2,5\}g' regular.txt ( 2个 g 中间有 2-5个o )

 

sed '1,2a asdf' regular.txt ( 在1,和2 行末尾添加 asdf )

sed '1,2d' regular.txt ( 删除 1 和 2行 )

sed '1,2s/old/new/g' regular.txt ( 在1 - 2 行中,替换满足条件的内容 )

 

 

 


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript正则表达式和Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值