You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

grep匹配configname:.*:返回结果过长,如何调整提取对应用户名

问题根源

你之前使用的.*属于贪婪匹配规则,会尽可能匹配最长的符合规则的字符串,因此会一直匹配到行内最后一个冒号才终止,最终返回结果超出预期。

如果仅需要实现你最初预期的输出configname:user:,直接把贪婪匹配的.*替换为非冒号匹配即可,不需要额外参数:

grep -o "configname:[^:]*:" sshutil_config

[^:]*只会匹配连续的非冒号字符,遇到下一个冒号就会停止匹配,不会出现多匹配的问题。

提取用户名存入变量的方案

方案1:grep Perl正则模式(一步提取)

直接使用如下命令即可将用户名存入变量,不需要二次裁剪内容:

usr=$(grep -oP 'configname:\K[^:]+' sshutil_config)

规则说明:

-P 参数启用Perl兼容正则语法,configname: 匹配固定前缀,\K 表示丢弃此前匹配的内容、仅输出后续匹配结果,[^:]+ 匹配连续的非冒号字符,正好对应第二个字段的用户名。

方案2:grep+cut组合(兼容性更强)

如果运行环境的grep不支持Perl正则参数,可以使用兼容性更好的组合命令:

usr=$(grep '^configname:' sshutil_config | cut -d ':' -f 2)

规则说明:

先筛选出前缀为configname:的行,再通过cut指定冒号为分隔符,直接提取第2个字段的内容,语法更简单易懂。

内容的提问来源于stack exchange,提问作者user12744746

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:06:04