2016-04-25 50 views
0

这是名单上有,我想它显示为第二个(删除逗号和第二个字打破之前行)击排序逗号和字符串

jkdlfid 
ljidklf, 
kdjfhda,kdospad,kfmduaj, 
hello 
lkoplkj 

想得到的结果是:

jkdlfid 
ljidklf 
kdjfhda 
kdospad 
kfmduaj 
hello 
lkoplkj 

是否有任何grep命令?为了清除我想在逗号前打破行,删除逗号然后打破行。

+0

您可以执行'grep -Eo'[^,] +'file'。顺便说一下,我认为没有关系排序你的问题! – blackSmith

+0

@blackSmith我认为你可以把评论作为答案... – Kent

+0

非常感谢布鲁! –

回答

0

您可以轻松地tr anslate逗号换行,并删除任何可能产生的空行:

$ printf 'foo\nbar,baz,ban\nbay,bat\n' | tr ',' '\n' | grep -v '^$' 
foo 
bar 
baz 
ban 
bay 
bat 
+0

OP已经结束逗号(您的示例没有),只需使用'tr'就不会得到预期的结果... – Kent

+0

@Kent谢谢,修正。 – l0b0

2

下面将做的伎俩:

grep -o '[^,]*' file 

的想法是匹配什么比逗号其他( [^,]否定字符类),零次或多次。但是,我会亲自使用;

grep -Eo '[^,]+' file 
0

f.awk

function emptyp(s) { # 1 if `s' consists of spaces and tabs 
    return s ~ /^[ \t]*$/ 
} 

{ 
    n = split($0, a, ",") 
    for (i=1; i<=n; i++) 
     if (!emptyp(a[i])) print a[i] 
} 

f.example

jkdlfid 
ljidklf, 
kdjfhda,kdospad,kfmduaj, 
hello 
lkoplkj 

用法:

awk -f f.awk f.example 
0

您可以使用tr命令这样做 我假设你的输入是test.txt的

tr -cs "[:alpha:]" "\n" < test.txt 
0

由子取下第一和最后一个逗号,然后更换两个逗号与RS新线之间。

awk'{sub(/f,/,f"")sub(/j,/,j"")}{gsub(/,/,RS)}1' file 

jkdlfid 
ljidklf 
kdjfhda 
kdospad 
kfmduaj 
hello 
lkoplkj