我有以下的模式
hi
hello
hallo
greetings
salutations
no more hello for you
我试图使用以下命令将所有换行符替换为制表符
sed -e "s_/\n_/\t_g"
但它并没有起作用。
请问有人能帮忙吗?我正在寻找sed/awk的解决方案。
我认为这里使用tr更好:
tr "\n" "\t" < newlines
正如Nifle在评论中建议的那样,newlines
在这里是包含原始文本的文件名。
由于sed
非常以行为导向,在这种情况下使用它更加复杂。
不确定您想要的输出内容
# awk -vRS="\n" -vORS="\t" '1' file
hi hello hallo greetings salutations no more hello for you
sed '$!{:a;N;s/\n/\t/;ta}' file
csh
中。 - CervEd你不能使用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
命令中扮演着定界符的角色,以便更轻松地使用斜杠进行搜索和替换。paste -s
你的sed脚本已经接近完成了,你只需要将它改为:
sed -e "s/\n/\t/g"
\
已经足够进行转义,不需要添加_
。同时,在结尾处需要添加/
来告诉sed这是脚本的最后一部分。
sed
中完成,但考虑到sed
与行有关,这有点像用锤子敲螺丝钉。 - Telemachus