Sed,匹配除了最后一个标识符之外的标识符列表中的单词(标识符)

时间:2018-05-08 08:34:02

标签: sed command-line

给出以下格式的标识符列表:

test_one another_one lol heres1 wow_the_last

我正在尝试使用sed将其替换为以下任何一种:

test_one,another_one,lol,heres1
test_one, another_one, lol, heres1
{test_one, another_one, lol, heres1}
{test_one,another_one,lol,heres1}

我可以使用以下sed命令执行此操作:

sed -e 's/\(\w*\)\s/\1,/g'

但是我希望找到一个更强大的解决方案,它不依赖于列表中没有尾随空格的最后一个单词。相反,我试图让比赛基于不在线的末尾或者跟随另一个词。但是我在这个方向上的尝试要么与任何东西不匹配,要么匹配太多。

sed -e 's/\(\w*\)^$/\1,/g'
sed -e 's/\(\w*\)[^$]/\1,/g'

我尝试了上述内容,但第一个似乎与任何内容都不匹配,下面的内容产生以下内容:

test_one,another_one,lol,heres,

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解你但使用awk:

$ awk 'BEGIN{OFS=","}{$1=$1;NF--;print}' file
test_one,another_one,lol,heres1

说明:

$ awk '
BEGIN { OFS="," }  # set the output field separator to a comma
{
    $1=$1          # rebuild the record, ie. use the commas
    NF--           # reduce field count by one
    print          # output
}' file