如何用制表符替换换行符?

时间:2009-10-24 11:23:51

标签: shell unix sed awk

我的模式如下

hi
hello
hallo
greetings
salutations
no more hello for you

我正在尝试使用以下命令替换所有换行符

sed -e "s_/\n_/\t_g"

但它不起作用。

有人可以帮忙吗?我正在寻找sed / awk的解决方案。

6 个答案:

答案 0 :(得分:38)

此处tr更好,我认为:

tr "\n" "\t" < newlines 

正如Nifle在评论中所建议的那样,newlines这里是保存原始文本的文件的名称。

因为sed是面向行的,所以在这种情况下使用它会更复杂。

答案 1 :(得分:12)

不确定您想要的输出

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 

答案 2 :(得分:9)

sed '$!{:a;N;s/\n/\t/;ta}' file

答案 3 :(得分:6)

您无法逐行替换换行符sed。您必须累积行并在之间替换换行符

text abc\n    <- can't replace this one

text abc\ntext def\n    <- you can replace the one after "abc" but not the one at the end

这个sed脚本累积了所有行,并删除了所有换行符,但最后一行:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'

顺便说一下,你的sed脚本sed -e "s_/\n_/\t_g"试图说“用斜杠替换所有斜杠后跟换行符,后跟选项卡”。下划线正在扮演s命令的分隔符的角色,以便斜杠可以更容易地用作搜索和替换的字符。

答案 4 :(得分:2)

paste -s

-s连接每个单独输入文件的所有行                  命令行顺序。每一行的换行符                  除了每个输入文件中的最后一行被替换为                  制表符,除非-d选项另有指定。

答案 5 :(得分:-1)

您的sed脚本几乎就在那里,您只需要将其更改为:

sed -e "s/\n/\t/g"

\足以逃脱,您无需添加_ 你需要在最后/之前添加g,让sed知道这是脚本的最后一部分。