在包括冒号之前删除所有内容并将逗号替换为换行符
Remove eveything before including colon and replace comma to newline
我只是希望将我的查询纳入一行。
我有一个下面的文件内容,我想删除最后一个冒号 (:
) 之前的所有内容,包括它本身,然后将逗号 (,
) 替换为换行符以获得所需的结果。
这些所有逗号分隔的值都是 linux 用户 ID 的
文件内容:
pa_tools:x:2998:nep08569,nep08623,nep14587,kpc12117,tpa06038,tpa10226,tpa14459,tpa14596,tpa21272,tpa28233,tpa32495,cpf30049,cpf32734,cpf38753,cpf41124,cpf41645,cpf42488,cpf42609,cpf54284,cpf55701,cpf56556,cpf61223,cpf64941,cpf66553,cpf69011,cpf72912,pfc37974,pfc40981,pfc48626,pfc69581,pfc80043,pfc82969,pfc84163,pfc87399,pfc87990,pfc87991,pfc98638,pa_tools_rs
已经尝试过:
工作解决方案:
1- $ sed -e 's/.*://g' -e 's/\,/\n/g' test_g
2- $ awk -F: '{print $NF}' test_g| awk 'BEGIN{RS=","}{=}1'
3- $ cat test_g| tr "," "\n"| tr ":" "\n" | sed '1,3d'
结果:
$ sed -e 's/.*://g' -e 's/\,/\n/g' test_g
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
有没有更好的技巧,请指教
您可以在 awk
的任何版本上使用此解决方案:
awk -F: '{[=10=] = $NF; gsub(/,/, "\n")} 1' file
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
使用 gnu-sed
它会类似于您尝试的代码:
sed 's/.*://; s/,/\n/g' file
与sed
:
sed 's/.*://; s/,/\n/g' file
# needs to be a sed the supports \n
# GNU and recent BSD do support \n but that is a superset
# of POSIX
如果您的 sed
不支持 \n
替换,则使用文字转义新行:
sed 's/.*://; s/,/\
/g' file
或使用tr
将,
替换为\n
:
sed 's/.*://' file | tr ',' '\n'
全部三个打印:
nep08569
nep08623
nep14587
...
pfc87991
pfc98638
pa_tools_rs
使用sed
$ sed 's/.*:\([^,]*\)\|,/\n/g' input_file
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
和bash
data=$(< test_g) # read the file
id_csv=${data##*:} # remove the prefix
IFS=, read -ra ids <<< "$id_csv" # split into an array
最后两步可以合并
IFS=, read -ra ids <<< "${data##*:}"
然后,输出以下之一:
printf '%s\n' "${ids[@]}"
(IFS=$'\n'; echo "${ids[*]}")
join() { local IFS=; shift; echo "$*"; }
join $'\n' "${ids[@]}"
我只是希望将我的查询纳入一行。
我有一个下面的文件内容,我想删除最后一个冒号 (:
) 之前的所有内容,包括它本身,然后将逗号 (,
) 替换为换行符以获得所需的结果。
这些所有逗号分隔的值都是 linux 用户 ID 的
文件内容:
pa_tools:x:2998:nep08569,nep08623,nep14587,kpc12117,tpa06038,tpa10226,tpa14459,tpa14596,tpa21272,tpa28233,tpa32495,cpf30049,cpf32734,cpf38753,cpf41124,cpf41645,cpf42488,cpf42609,cpf54284,cpf55701,cpf56556,cpf61223,cpf64941,cpf66553,cpf69011,cpf72912,pfc37974,pfc40981,pfc48626,pfc69581,pfc80043,pfc82969,pfc84163,pfc87399,pfc87990,pfc87991,pfc98638,pa_tools_rs
已经尝试过:
工作解决方案:
1- $ sed -e 's/.*://g' -e 's/\,/\n/g' test_g
2- $ awk -F: '{print $NF}' test_g| awk 'BEGIN{RS=","}{=}1'
3- $ cat test_g| tr "," "\n"| tr ":" "\n" | sed '1,3d'
结果:
$ sed -e 's/.*://g' -e 's/\,/\n/g' test_g
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
有没有更好的技巧,请指教
您可以在 awk
的任何版本上使用此解决方案:
awk -F: '{[=10=] = $NF; gsub(/,/, "\n")} 1' file
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
使用 gnu-sed
它会类似于您尝试的代码:
sed 's/.*://; s/,/\n/g' file
与sed
:
sed 's/.*://; s/,/\n/g' file
# needs to be a sed the supports \n
# GNU and recent BSD do support \n but that is a superset
# of POSIX
如果您的 sed
不支持 \n
替换,则使用文字转义新行:
sed 's/.*://; s/,/\
/g' file
或使用tr
将,
替换为\n
:
sed 's/.*://' file | tr ',' '\n'
全部三个打印:
nep08569
nep08623
nep14587
...
pfc87991
pfc98638
pa_tools_rs
使用sed
$ sed 's/.*:\([^,]*\)\|,/\n/g' input_file
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
和bash
data=$(< test_g) # read the file
id_csv=${data##*:} # remove the prefix
IFS=, read -ra ids <<< "$id_csv" # split into an array
最后两步可以合并
IFS=, read -ra ids <<< "${data##*:}"
然后,输出以下之一:
printf '%s\n' "${ids[@]}"
(IFS=$'\n'; echo "${ids[*]}")
join() { local IFS=; shift; echo "$*"; }
join $'\n' "${ids[@]}"