unix sed 删除适配器名称

unix sed 删除适配器名称

我想使用管道将输出传输到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 awkor 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使用提供的ORSOFS值重新格式化它。

答案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

相关内容