替换换行符并与 SED 一起删除换行符

Jor*_*rdo 2 bash sed

我在这些词之间有标签(五个):

cat dog

我想要这个输出:

猫
狗

我试过这个:sed 's/\t/\n/g; /^$/d' pets 输出与以下相同sed 's/\t/\n/g' pets

猫




狗

我不得不执行 sed 两次才能得到我想要的。这就像sed 's/\t/\n/g' pets>tempsed '/^$/d' temp

有没有办法用一个命令获得所需的输出?

Dav*_*ica 8

继续我的评论。有问题sed 's/\t/\n/g的是你将取代 '\t'一个'\n'。您想用单个换行符替换一系列制表符。为此,您需要:

sed 's/\t\t*/\n/g'
Run Code Online (Sandbox Code Playgroud)

或者,如果您喜欢明确地将'\t'in括起来[ ]也可以。

该表达式'\t'匹配单个选项卡,后'\t\t*'跟它匹配一个选项卡和零个或多个选项卡,然后序列替换为单个'\n',从而产生所需的输出:

cat
dog
Run Code Online (Sandbox Code Playgroud)

最后的g(全局)只会用一个换行符替换每个序列,例如

"cat     dog           fish" 
Run Code Online (Sandbox Code Playgroud)

(由制表符分隔),变成

cat
dog
fish
Run Code Online (Sandbox Code Playgroud)

如果您有任何问题,请告诉我。