我通过执行
cat interim_detailed_cert | grep -E "Label :|dNSName:"
收集了以下输出。
输出
Label : cert1
dNSName: dns1.1
dNSName: dns1.2
Label : cert2
dNSName: dns2.1
Label : cert3
dNSName: dns3.1
dNSName: dns3.2
从上面开始,我尝试仅过滤单行中的 dNSName 值(如果有两个值),并用逗号分隔,
预期产量
dns1.1, dns1.2
dns2.2
dns3.1, dns3.2
对此的任何建议都会有所帮助。谢谢
鉴于您的示例,我将利用 GNU
AWK
来完成此任务,让 command
输出为
Label : cert1
dNSName: dns1.1
dNSName: dns1.2
Label : cert2
dNSName: dns2.1
Label : cert3
dNSName: dns3.1
dNSName: dns3.2
然后
command | awk 'BEGIN{RS="\n[^[:space:]]";OFS=", ";FPAT="dns[0-9.]+"}{$1=$1;print}'
提供输出
dns1.1, dns1.2
dns2.1
dns3.1, dns3.2
说明:我告知 GNU
AWK
,记录由换行符 (\n
) 分隔,后跟非空白字符,即记录在每行的第一个字符处分割,该行不以空白字符开头,即输出中的字段应以逗号分隔,后跟空格,该字段由 dns
后跟一个或多个 (+
) 数字或点组成。我使用 $1=$1
来触发字符串重建,并使用 print
来输出更改后的行。
(在 GNU Awk 5.1.0 中测试)