首页 > 解决方案 > 如何将逗号分隔的值放入换行符并在包含冒号之前删除所有 id

问题描述

我有以下来自 Linux 系统的命令输出,它通过逗号分隔获取所有帐户名,我希望将其放入换行符中,因此删除所有命令并将单个帐户名放入换行符中。

$ getent group pi_infra
pi_infra:*:5899:pxf59093,pxv07744,pxa02374,pxa07513,pxa08599,pxa11102,pxa30995,pxa34158,pxf07822,pxf29346,pxf30902,pxf31604,pxf31606,pxf31953,pxf34985,pxf41740,pxf41778,pxf43236,pxf43917,pxf45518,pxf46461,pxf49051,pxf58440,pxf58523,pxf58621,pxf60794,pxf60938,pxf61299,pxf63061,pxp08000,pxp25916,pxp42841,pxp68003,pxp69833,pxp87972

$ cat pi_in| sed 's/,/\n/g'

$ cat pi_in| tr ',' '\n'

结果 综上所述。

pi_infra:*:5899:pxf59093
pxv07744
pxa02374
pxa07513
pxa08599
pxa11102
pxa30995
pxa34158
pxf07822
pxf29346
pxf30902
pxf31604
pxf31606
pxf31953
pxf34985
pxf41740
pxf41778
pxf43236
pxf43917
pxf45518
pxf46461
pxf49051
pxf58440
pxf58523
pxf58621
pxf60794
pxf60938
pxf61299
pxf63061
pxp08000
pxp25916
pxp42841
pxp68003
pxp69833
pxp87972

因为我想删除之前的所有东西:并且只想要打印 ID,因此我选择在下面使用。

$ cat pi_in| cut -d":" -f4 | tr ',' '\n'
pxf59093
pxv07744
pxa02374
pxa07513
pxa08599
pxa11102
pxa30995
pxa34158
pxf07822
pxf29346
pxf30902
pxf31604
pxf31606
pxf31953
pxf34985
pxf41740
pxf41778
pxf43236
pxf43917
pxf45518
pxf46461
pxf49051
pxf58440
pxf58523
pxf58621
pxf60794
pxf60938
pxf61299
pxf63061
pxp08000
pxp25916
pxp42841
pxp68003
pxp69833
pxp87972

以上工作正常,但看起来这一切都可以明显地集成为一个而不是使用trcut两次。

最好awksed将是合适的。

谢谢。

标签: bashawksed

解决方案


$ sed 's/.*://; y/,/\n/' file
pxf59093
pxv07744
pxa02374
...

s/.*://删除最后一个冒号之前的所有内容,以及冒号本身,并y/,/\n/执行tr您的方法。


推荐阅读