22:
因为只有行首跟行尾
(^$)
,所以,这样就可以找出空白行啦!再来,假设你已经知道在一个程序½
(shell script)
或者是配置文件当中,空白行与开头为
#
的那一行是批注,因此如果你要½资料列
出给别人参考时,
可以½这些数据省略掉以½省保贵的纸张,那么你可以怎么作呢?
我们以
/etc/rsyslog.conf
这个文件来作范例,你可以自行参考一下输出的½果:
[dmtsai@study ~]$
cat
-
n /etc/rsyslog.conf
#
CentOS 7
中,
½
果可以
发现
91
行的
出,很多空白行与
#
开头
的批注行
[dmtsai@study ~]$
grep
-
v '^$'
/etc/rsyslog.conf | grep
-
v '^#'
#
½
½
14
行,其中第一
-
v '^$'
』代表『不要空白行』,
#
第二
-
v '^#'
』代表『不要
开头
#
的那行』喔!
是否½省很多版面啊?另外,你可能也会问,那为何不要出现
#
的符号的那行就直½舍弃呢?没办
法!因为某些批注是与设定写在同一行的后面,
如果你只是抓
#
就予以去除,那就会½某些设定也
同时移除了!那错误就大了~
.
例题四、任意一个字符
.
与重复字符
*
第十章
bash
当中,我们知道
通配符
*
可以用来代表任意
(0
或多个
)
字符,
但是
正规表示法并不是
通配符
,两者之间是不相同的!
至于正规表示法当中的『
.
』则代表『绝对有一个任意字符』的意
思!这两个符号在正规表示法的意义如下:
.
. (
小数点
)
:代表『一定有一个任意字符』的意思;
.
* (
星星号
)
:代表『重复前一个字符,
0
到无穷多次』的意思,为组合形态
这样½不好懂,我们直½做个练习吧!假设我需要找出
g..d
的字符串,亦即共有四个字符,
起头
g
而½束是
d
,我可以这样做:
[dmtsai@study ~]$
grep
-
n 'g..d' regular_express.txt
1:"Open Source" is a
good
mechanism to develop programs.
9:Oh! The soup taste
good
.
16:The world <Happy> is the same with "
glad
".
因为强调
g
d
之间一定要存在两个字符,因此,第
13
行的
god
与第
14
行的
gd
就不会被列
出来啦!再来,如果我想要列出有
oo, ooo, oooo
等等的数据,
也就是说,至少要有两个
(
) o
以上,
该如何是好?是
o*
还是
oo*
还是
ooo*
呢?
虽然你可以试看看½果,
不过½果太占版面了
@_@
,所以,我这里就直½说明。
因为
*
代表的是『
重复
0
个或多个前面的
RE
字符
』的意义,
因此,
o*
』代表的是:『拥有空
字符或一个
o
以上的字符』
特别注意,因为允许空字符
(
就是有没有字符都可以的意思
)
,因此,
grep -n 'o*' regular_express.txt
』½会把所有的数据都打印出来屏幕上!
那如果是『
oo*
』呢?则第一个
o
肯定必须要存在,第二个
o
则是可有可无的多个
o
所以,凡
是含有
o, oo, ooo, oooo
等等,都可以被列出来~