事实上,正则表达式不仅适用于linux,多种编程语言中也可以使用到它,因为它实际上是人们对于某种规律的表达方式。
如果要把他的所有应用都讲上的话那这篇文章会变的太长以至于无法阅读,我只介绍他在linux下和几种最重要的命令的搭配使用。
基本的元字符集:
^行首
$行尾
*匹配星号前的字符一次或多次
[]匹配[]内的字符,可以是一个字符也可以是字符列
\用来屏蔽一个元字符的特殊含义,可以使其失去原有的意义。
pattern\{n\}用来匹配前面pattern出现的次数。n为次数。
后面所说的将是他们的和具体命令结合的例子。
grep是个非常常用的工具,linux其实和internet一样,都是一个充满了大量信息、数据的东西,如何有效的过滤自己不用的信息、获取有用的信息反映了一个人水平的高低,当我还是linux新手的时候还不懂得用grep呢。
三、awk和正则表达式
awk对于从大的数据文件中抽取指定的数据包十分有用,比如你可以用他来管理passwd文件,或者是日志文件(相当巨大的文件,而用了awk就会变的很轻松了),通常awk都是和grep结合来用的,又grep抽出行,再有awk抽出行中指定的列,不过就算单独用awk也一样好用。请看看这样的例子
awk -F: '{if($6 ~ /bash/) print $0}' /etc/passwd
这是个相当复杂的例子,我举这个例子的目的只是为了说明结合命令语法和正则表达式可以实现相当强的过滤作用,这个命令的作用是从passwd文件中的第六列中抽取所有含有bash的项目然后在打印这些项目的第一项即他们的用户名。我假设passwd为这样的内容
root:*:*:*:*:*:/bin/bash
user:*:*:*:*:*:/bin/bash
xie:*:*:*:*:*:/bin/csh
ftp:*:*:*:*:*:/bin/zsh
那么输出就应该为
root
user
<小于
<=小于等于
==等于(这个和C语言是一样的)
!=不等于
>=大于等于
~匹配正则表达式
!~不匹配正则表达式
ls -l|awk 'BEGIN {print "Name\t SIZE"} {if /^[^d]/} {print $9 "\t" $5} {tot+=5} END {print "total KB:"tot}'
可以用此表达式来打印文件名几其长度,然后输出所有文件加起来的大小。
他相当与于我前面所说的先找出不是文件夹的文件,然后打印他们的大小和长度,把这些大小值放入变量tot中,放一次加一次(+=),最后打印tot,就可以把所有文件的大小求出来了。
&& AND,必须同时为真
! 非,求逆
awk '{if ($3=="root" && $5="/root") print $0}' /etc/passwd
当组和个人目录都为root的时候打印用户的名字。
文书编辑更加用用到正则表达式了,比如说在编辑状态下输入^,可以跳到行中第一个非空字符,输入$,可以跳到本行行尾(在行号表示的时候,$代表最后一行)。输入/可以搜索字符串,同样可以使用正则表达式匹配,如/^str,则匹配行首的str,输入/str$,则匹配行尾的str。其他的和正则表达式方法一样。
linux还有更复杂的sed也会用到正则表达式,事实上大部分和信息过滤有关的都离不开他,不过小子才疏学浅,实在是写不了了,仅以此文抛砖引玉,不过各位大侠可千万别因为我这篇文章写的差而全把砖头往我招呼啊……
还有一点是给初学者的:记得多用|管道和文件操作符啊,0代表标准输入、1代表标准输出、2代表错误输出,其他还有3-9你是可以任意使用的,如可以先把某文件指到操作符4,再把4指向0,那么就可以作为程序的输入了。