带有制表符和否定匹配的sed

时间:2014-09-14 09:00:11

标签: linux sed

我有以下文件

a
b   c   d   e

所有标签都是分开的。

我的输出应该是以下

a,
b,c,d,e

我正在尝试以下方法。

sed 's/[[:space:]]*/,/g' input.txt
this gives me the following
,a,
,b,c,d,e,

我应该如何删除两行的第一个逗号。所以输出应该是这样的

一个,    B,C,d,E,

设法执行以下操作,但使用了两个sed命令。

cat input.txt |  sed 's/[[:space:]]*/,/g' | sed 's/^,//'  (sorry useless use of cat)

使用一个sed命令有更好的方法吗? (我不是在寻找awk / tr或任何其他方法,只有sed)

2 个答案:

答案 0 :(得分:1)

你可以试试下面的sed命令,

$ sed ':a;N;$!ba;s/\n/,\n/g;s/ \+/,/g' file
a,
b,c,d,e

sed ':a;N;$!ba;s/\n/,\n/g;s/[[:blank:]]\+/,/g' file

答案 1 :(得分:1)

添加空格前有一些字母的条件:

sed 's/\([a-z]\+\)[[:space:]]*/\1,/g' input.txt

在一个命令中链接两个sed规则(这种方式可能更具可读性):

sed 's/[[:space:]]*/,/g;s/^,//' input.txt