显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行 ?
参考回答
在 Linux 中,可以使用 grep
结合正则表达式来查找 /etc/inittab
文件中以 #
开头,后面跟一个或多个空白字符,再跟一个非空白字符的行:
^#
:匹配行首的#
号。\s+
:匹配一个或多个空白字符(包括空格和制表符)。[^[:space:]]
:匹配任意非空白字符(即不能是空格或 Tab)。
详细讲解与拓展
1. 解释正则表达式
-E
:启用扩展正则表达式(ERE),否则需要\+
代替+
。^#
:表示匹配行的开头,并且第一个字符必须是#
。\s+
:匹配至少一个空白字符(\s
代表空白,包括空格和 Tab
\t
)。[^[:space:]]
:表示匹配任何非空白字符,即#
号后面有空格,再跟一个可见字符。
2. 使用 egrep
(等效于 grep -E
)
在一些旧版本 Linux 上,egrep
等效于 grep -E
:
3. grep
不支持 \s
时的替代方案
部分 grep
版本不支持 \s
,可以改用 [[:space:]]
:
[[:space:]]
等价于\s
,匹配空格和 Tab。
4. 适用于多个空白字符的情况
如果 /etc/inittab
可能包含多个空格或 Tab 混合的情况,可以使用:
-P
:使用 Perl 兼容正则表达式(PCRE)。\s+
:匹配一个或多个空格或 Tab。[^ \t]
:匹配任何非空格或 Tab 的字符。
总结
- 使用
grep -E '^#\s+[^[:space:]]' /etc/inittab
进行匹配。 \s+
代表一个或多个空白字符,[^[:space:]]
代表非空白字符。- 兼容性更好的版本是
grep -E '^#[[:space:]]+[^[:space:]]' /etc/inittab
。 - 如果
grep
不支持\s
,可以使用[[:space:]]
或-P
选项。
这样可以精准匹配以 #
开头,后面有空格或 Tab,且之后跟有可见字符的行!