Unix下使用grep提取特定字符串遇异常问题排查
解决grep匹配default:group条目时的贪婪匹配问题
我来帮你搞定这个grep匹配的问题——你遇到的核心问题是正则表达式的贪婪匹配特性在搞鬼,咱们一步步拆解清楚:
问题根源
你最初用的正则default:group:.*里,.*会匹配任意字符(包括空格),而且是贪婪模式:它会从第一个default:group:开始,一直匹配到整个字符串的末尾,这就导致你拿到的结果包含了后面的default:mask、default:other等无关内容,自然不符合预期。
解决方案
我们需要精准匹配每个独立的default:group:开头的权限条目(因为所有权限条目都是用空格分隔的),可以用以下两种方式实现:
方式1:分步筛选
先提取所有default:group:开头的完整条目,再筛选出带rwx的:
echo "# file: /test/test1 # owner: own # group: grp user::rwx user:nr:rwx user:ac:rwx user:ao:rwx group::r-x group:accounts:--x group:fin:r-x mask::rwx other::--- default:user::rwx default:group::r-x default:group:accounts:--x default:group:fin:rwx default:mask::rwx default:other::---" | grep -o "default:group:[^ ]*" | grep "rwx"
default:group:[^ ]*:[^ ]表示匹配非空格字符,*表示匹配0个或多个,这样就能精准捕获每个以default:group:开头的独立条目(到下一个空格为止)。- 再用
grep "rwx"筛选出权限为rwx的条目。
方式2:一步到位匹配
直接用正则精准匹配带rwx的default:group条目:
echo "# file: /test/test1 # owner: own # group: grp user::rwx user:nr:rwx user:ac:rwx user:ao:rwx group::r-x group:accounts:--x group:fin:r-x mask::rwx other::--- default:user::rwx default:group::r-x default:group:accounts:--x default:group:fin:rwx default:mask::rwx default:other::---" | grep -o "default:group:[^ ]*rwx"
预期输出
两种方式都会得到你想要的结果:
default:group:fin:rwx
内容的提问来源于stack exchange,提问作者contactaps
相关产品推荐
相关产品推荐

