Bash排序逗号和字符串

时间:2016-04-25 11:44:21

标签: bash list sorting grep

这是我的列表,我希望它显示为第二个(删除逗号并在第二个单词之前中断行)

jkdlfid
ljidklf,
kdjfhda,kdospad,kfmduaj,
hello
lkoplkj

希望结果为:

jkdlfid
ljidklf
kdjfhda
kdospad
kfmduaj
hello
lkoplkj

这有没有grep命令?要清除我想在逗号之前打破行,删除逗号然后打破行。

5 个答案:

答案 0 :(得分:2)

以下将解决这个问题:

grep -o '[^,]*' file

这个想法是匹配除逗号([^,]否定字符类)以外的任何内容,零次或多次。但是,我个人会用;

grep -Eo '[^,]+' file

答案 1 :(得分:0)

您可以轻松tr将逗号添加到换行符并删除任何产生的空行:

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

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用tr命令执行此操作 我假设你的输入是在test.txt

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

答案 4 :(得分:0)

按sub删除第一个和最后一个逗号,然后用RS new line替换两个逗号。

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

jkdlfid
ljidklf
kdjfhda
kdospad
kfmduaj
hello
lkoplkj