我在这些词之间有制表符(五个):cat dog
我想要这个输出:
猫
狗
我尝试了这个:sed 's/\t/\n/g; /^$/d' pets
并且输出与sed 's/\t/\n/g' pets
相同:
猫
狗
我必须执行两次sed才能得到想要的结果。像sed 's/\t/\n/g' pets>temp
之后的这个sed '/^$/d' temp
有没有一种方法可以通过一个命令获得所需的输出?
最佳答案
继续我的评论。 sed 's/\t/\n/g
的问题在于,您将用'\t'
替换每个 '\n'
的。您要用单个换行符替换一系列选项卡。为此,您需要:
sed 's/\t\t*/\n/g'
或者,如果您希望将
'\t'
明确包含在[ ]
中,也可以。表达式
'\t'
与单个制表符匹配,后跟'\t\t*'
时与一个制表符和零个或多个制表符匹配,这些制表符之后用单个'\n'
替换序列,从而得到所需的输出:cat
dog
最后的
g
(全局)只会将每个序列替换为一个换行符,例如"cat dog fish"
(由制表符分隔),变为
cat
dog
fish
如果您有任何问题,请告诉我。
关于bash - 替换标签以换行,并与SED一起删除换行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45657084/