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

Vij*_*jay 13 unix shell awk sed

我的模式如下

hi
hello
hallo
greetings
salutations
no more hello for you
Run Code Online (Sandbox Code Playgroud)

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

sed -e "s_/\n_/\t_g"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

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

Tel*_*hus 40

tr我认为这里更好:

tr "\n" "\t" < newlines 
Run Code Online (Sandbox Code Playgroud)

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

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

  • @John:有人可能会告诉你如何在`sed`中做到这一点,但鉴于`sed`是如此线性导向,这有点像锤击螺丝. (3认同)

gho*_*g74 12

不确定你想要的输出

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 9

sed '$!{:a;N;s/\n/\t/;ta}' file
Run Code Online (Sandbox Code Playgroud)

  • 您能否还解释一下您正在使用的命令? (3认同)

Pau*_*ce. 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
Run Code Online (Sandbox Code Playgroud)

sed脚本累积所有行并删除所有换行但最后一行:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'
Run Code Online (Sandbox Code Playgroud)

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


Fra*_*Hou 6

paste -s
Run Code Online (Sandbox Code Playgroud)

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