义是『反向选择』的意思。
例如,我不要大写字符,则为
[^A
-
Z]
。但是,需要特别注意的是,
如果以
grep
-
n [^A
-
Z] regular_express.txt
来搜寻,却发现该
文件
内的所有行都被列
出,为什么?因为这个
[^A
-
Z]
是『非大写字符』的意思,
因为每一行均有非大写字符,例如第
一行的
"Open Source"
就有
p,e,n,o....
等等的小写字
grep
-
n 'oo[^t]' regular_express.txt
\
{n,m
\
}
意义:连续
n
到
m
个的『前一个
RE
字符』
意义:若为
\
{n
\
}
则是连续
n
个的前一个
RE
字符,
意义:若是
\
{n,
\
}
则是连续
n
个以上的前一个
RE
字符!
范例:在
g
与
g
之间有
2
个到
3
个的
o
存在的字符串,亦即
(goog)(gooog)
grep
-
n 'go
\
{2,3
\
}g' regular_express.txt
再次强调:『
正规表示法的特殊字符』与一般在指令列输入指令的『通配符』并不相同
,
例如,在
通配符当中的
*
代表的是『
0 ~
无限多个字符』的意思,但是在正规表示法当中,
*
则是『重复
0
到无穷多个的前一个
RE
字符』的意思~使用的意义并不相同,不要搞混了!
举例来说,不支持正规表示法的
ls
这个工具中,若我们使用
『
ls -l *
』
代表的是任意档名的文件,
而
『
ls -l a*
』代表的是以
a
为开头的任何档名的文件,
但在正规表示法中,我们要找到含有以
a
为开头的文件,则必须要这样:
(
需搭配支持正规表示法的工具
)
ls | grep -n '^a.*'
例题:
以
ls
-
l
配合
grep
找出
/etc/
底下文件类型为链½文件属性的文件名
答:
由于
ls
-
l
列出连½档时标头会是『
lrwxrwxrwx
』,因此使用如下的指令即可找出½果:
ls
-
l /etc | grep '^l'
若½想要列出几个
文件
,再以『
|wc
-
l
』
来累加处理即可。
11.2.5 sed
工具
在了½了一些正规表示法的基础应用之后,再来呢?呵呵~两个东西可以玩一玩的,那就是
sed
跟
底下会½绍的
awk
了!
这两个家伙可是相当的有用的啊!举例来说,鸟哥写的
logfile.sh
分析登录
文件的小程序
(
第十八章会谈到
)
,绝大部分分析关键词的取用、统计等等,就是用这两个宝贝蛋来帮
我完成的!那么你说,要不要玩一玩啊?
^_^
我们先来谈一谈
sed
好了,
sed
本身也是一个管线命令,可以分析
standard input
的啦!
而且
sed
还可以½数据½行取代、删除、新增、撷取特定行等等的功能呢!很不错吧~
我们先来了½一下
sed
的用法,再来聊他的用途好了!
[dmtsai@study ~]$
sed [
-
nefr] [
动
作
]
选项
与
参数
:
-
n
:使用安
静
(silent)
模式。在一般
sed
的用法中,所有
来
自
STDIN
的
数
据一般都
会
被列出到屏幕上。
但如果加上
-
n
参数
后,
则
只有
经过
sed
特殊
处
理的那一行
(
或者
动
作
)
才
会
被列出
来
。
-
e
:直½在指令列模式上
½
行
sed
的
动
作
编辑
;