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

Linux中如何提取CN=与逗号之间的目标字符串?

问题分析

你之前用的sed -n "/CN=/,/,/p"命令逻辑不对——它是匹配包含CN=的行到包含逗号的行并打印,不是提取两个标记之间的子串,所以拿不到想要的结果。

正确解决方法

这里提供几种实用的命令行工具实现方式:

1. 使用sed(最通用)

通过正则替换过滤掉无关内容,只保留CN=到第一个逗号之间的部分:

sed 's/.*CN=\([^,]*\),.*/\1/' test.txt

原理:

  • .*CN= 匹配CN=之前的所有字符
  • \([^,]*\) 捕获CN=后到第一个逗号前的所有非逗号字符(目标内容)
  • .* 匹配逗号之后的所有字符
  • 用\1替换整行,只保留捕获的目标内容

2. 使用awk

以逗号为分隔符拆分字段,定位到含CN=的字段后提取内容:

awk -F ',' '{for(i=1;i<=NF;i++){if($i~/CN=/){sub(/CN=/,"",$i);print $i}}}' test.txt

原理:

  • -F ',' 把每行按逗号拆分成多个字段
  • 遍历所有字段,找到包含CN=的字段
  • 用sub去掉字段里的CN=前缀,打印剩余内容

3. 使用grep(需支持Perl正则)

如果你的grep支持-P参数(多数Linux发行版默认支持),可以用更简洁的写法:

grep -oP 'CN=\K[^,]*' test.txt

原理:

  • -o 只输出匹配到的部分,不输出整行
  • -P 启用Perl兼容正则
  • \K 忽略前面匹配到的CN=,只保留后面到第一个逗号前的非逗号字符

以上三种命令执行后,都会输出预期结果:

abc.def.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:12:37