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