显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行 ?

参考回答

在 Linux 中,可以使用 grep 结合正则表达式来查找 /etc/inittab 文件中# 开头,后面跟一个或多个空白字符,再跟一个非空白字符的行:

grep -E '^#\s+[^[:space:]]' /etc/inittab
Bash
  • ^#:匹配行首的 # 号。
  • \s+:匹配一个或多个空白字符(包括空格和制表符)。
  • [^[:space:]]:匹配任意非空白字符(即不能是空格或 Tab)。

详细讲解与拓展

1. 解释正则表达式

grep -E '^#\s+[^[:space:]]' /etc/inittab
Bash
  • -E:启用扩展正则表达式(ERE),否则需要 \+ 代替 +
  • ^#:表示匹配行的开头,并且第一个字符必须是 #
  • \s+:匹配至少一个空白字符\s 代表空白,包括空格 和 Tab \t)。
  • [^[:space:]]:表示匹配任何非空白字符,即 # 号后面有空格,再跟一个可见字符

2. 使用 egrep(等效于 grep -E

在一些旧版本 Linux 上,egrep 等效于 grep -E

egrep '^#\s+[^[:space:]]' /etc/inittab
Bash

3. grep 不支持 \s 时的替代方案

部分 grep 版本不支持 \s,可以改用 [[:space:]]

grep -E '^#[[:space:]]+[^[:space:]]' /etc/inittab
Bash
  • [[:space:]] 等价于 \s,匹配空格和 Tab。

4. 适用于多个空白字符的情况

如果 /etc/inittab 可能包含多个空格或 Tab 混合的情况,可以使用:

grep -P '^#\s+[^ \t]' /etc/inittab
Bash
  • -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,且之后跟有可见字符的行!

发表评论

后才能评论