如何在 Linux 中将多行 grep 输出合并到单行

问题描述 投票:0回答:1

我通过执行

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

对此的任何建议都会有所帮助。谢谢

awk sed
1个回答
0
投票

鉴于您的示例,我将利用 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 中测试)

© www.soinside.com 2019 - 2024. All rights reserved.