2016-04-25 81 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