我想使用管道将输出传输到sed
并删除下面的适配器名称,sed
并用逗号对值进行分组
ent13: 16 3979 ent12: 211 411 3978 ent11: 15 3977 ent10: 111 178 179 311 511 1719 3976
答案1
用逗号替换空格,删除冒号之前的单词,删除前导空格,删除空格之前的逗号:
sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'
输出:
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
答案2
您可以sed
首先删除包含的图案ent
,然后将间距放开并将其替换,
为
sed 's/ent[0-9][0-9]: //g; s/ /,/g'
答案3
使用 GNU awk
or mawk
(支持 中的正则表达式RS
):
$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
或者,等价地,
$ mawk 'BEGIN { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
这将单行视为一组由entNN:
(其中N
是某个数字)分隔的记录。每条记录都作为一组空格分隔的字段读取。
该$1 != ""
测试会跳过第一个空记录(第一个记录分隔符之前没有任何内容),并且相应的块只需执行以下操作即可重新格式化记录以进行输出$1=$1
。这将导致awk
使用提供的ORS
和OFS
值重新格式化它。
答案4
“用逗号对值进行分组”是否意味着“用逗号将每个适配器的编号与其他适配器的编号分开”?然后,尝试
sed 's/ *ent[0-9][0-9]: /, /g; s/^, //g' file
16 3979, 211 411 3978, 15 3977, 111 178 179 311 511 1719 3976