ubuntu - 正则表达式

正则表达式

相信只要接触过一种语言 不管是什么语言,那么都会或多或少的接触使用过正则表达式,我的理解就是正则表达式是能够表达特定格式的特殊的字符串。

语系对正则表达式的影响。 LANG=C 时,编码顺序是1,2,3.....A,B,C,D.....Z,a,b,c,d....z 当LANG=zh_CN时,编码顺序为1,2,3.....A,a,B,b,C,c....Z,z相信你已经看出来区别了, 之前我们说过LANG 是环境变量 要查看很简单 , echo $LANG 就行了,要改变 直接LANG=C就ok

特殊符号代表意义

[:alnum:]

代表英文大小写字母及数字,即 0-9,A-Z,a-z

[:alpha:]

代表任何英文字母, 即 A-Z,a-z
[:blank:]代表键盘上tab键

[:digit:]

代表数字,即0-9

[:grapha:]

除空格和tab键外的其他按键字符

[:lower:]

代表任何小写字母
[:print:]代表任何可被打印出来的字符

[:punct:]

代表标点字符 即:" ' ? ! ; # $
[:upper:]代表任何大写字母

[:space:]

代表任何可以产生空格的字符包括 tab 和CR等

[:xdigit:]

代表十六进制的数字类型, 因此它是 0-9,A-F,a-f

[:cntrl:]

代表键盘上的控制字符 , 包括 CR, LF , Tab, Del等

上面的表 听说在正则表达式中 和99乘法表在数学中拥有同样地位的东西, 需要死记硬背下来的 其实很简单的。

因为Linux中的很多工具都是可以使用正则表达式的, 所以我们需要在平常的工作学习中 多用正则表达式, 学过程序的同学应该都知道正则表达式在程序中占有怎样的位置的。

拿grep命令来说, 我用的最多的就是和find命令的组合使用, 因为经常需要查找某个字符串在那些文件中有, 这样写的 find -name *.java -exec grep -Hn "Hello world" {} \;

后面的“{} \;”是一种格式, 我到现在都不知道为什么要那些东西, 不过不用的话这条命令都是错的,

grep [-A] [-B] [-iHn] [--color=auto] "搜索的字符串" filename

-A 表示after 意思是 出去查找到的行把它之后的几行也列出来

-B 表示 befer 意思是 除去查找到的行,把它之前的几行也列出来

我的机子上默认查找到的东西是有颜色的, 这是为什么咧, alias | grep “grep” 就知道了 , 原来在~/.bashrc 中有这么一句话 alias grep = ‘grep --color=auto’ 如果你查找到的东西没有颜色,那么就在你的~/.bashrc中添加上, 然后 source ~/.baserc

------------------------------------------------------

这几天的练习我会使用鸟哥的一个资源 http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt 直接下载

(再说一次我这个是边看鸟哥的书边在记笔记,可能和书上没区别的,如果想好好学呢 ,还是和我一样去买一本鸟哥吧)

我们还需要配置一下vim。 输入vim ~/.vimrc

在里面写入 set nu 回车 set hlsearch ,就够了, set nu表示显示行号, set hlsearch 表示高亮显示查找 , 如果需要取消 删掉 ~/.vimrc

1.一般查找 , 很简单 , 输入 grep -n “the” regular_express.txt 试试, 记得grep工具的 反向选择 -v就是不包含输入字符串的。-i 表示不区分大小写

2.现在来点简单的正则表达式练习, 查找 test 和 tast的行呢, 这里可以使用正则表达式了, 中括号里面的表示有且只有一个, 刚才那个就是 grep -n "t[ea]st" regular_express.txt . 如果是test前没有a呢 ,需要使用 ^ 这个符号了, 就是 grep -n "[^a]test" regular_express.txt 如果要查找 test 但是要求他前面不能有大写字母该怎么办嫩, 如果是在LANG=C下面呢可以这样 grep -n "[^A-Z]test" regular_express.txt. 如果实在LANG=zh_CN下就不能这样了 , 因为A-Z 也包括了小写字母这里就可以使用刚才说的必须背的东西了 grep -n “[^[:upper:]]test” regular_express.txt 这样的命令呢可以直接不考虑语言环境的使用 是不是很爽阿,


上面有两个符号 “-” "^" 横杠表示连续的编码字符,比如 a-z表示a到z的所有小写字母 当然这个要看语系的, “^” 表示非, 就是相反的意思拉,这里个符号在中括好里面是这个意思拉, 出了中括号就不知道了。

3. 行首与行尾符 “^$”,^出了中括号就表示成行首了, 如果我要查找以a开头的行,就是 grep -n "^a" regular_express.txt "鸟哥还喜欢吃苹果。。 我以为鸟哥都不食人间烟火了呢" 行尾符就是 “$” , 查找以a结尾的行呢。 这里注意了是 grep -n "a$" regular_express.txt 。。a在前面, 刚才我以为是$a自以为正确 结果输入进去全都出来了,去,,!

这里要注意了,在 MS下面的换行符是“^M$”, 而Linux的换行符是“$” , 空白行怎么找呢 一行里面只有行首和行尾 就是空白行了 “^$” . grep -v 反向选择很有用的哦

4.任意一个字符 . , 和重复字符* ,这里的*有点难以理解,表示的是重复0个或多个前面的RE字符, o* 表示的是 具有空字符或一个o以上的字符, 如果你要查找至少两个oo应该是 ooo*, 记住*只是前面一个符号 所以 ooo* 应该这样看 oo+o* 就是oo后面接了0个或多个o, (搞半天呢。。。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值