我在这些词之间有制表符(五个):
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/

10-13 07:25
查看更多