linux sed命令,如何替换换行符“\n”

原创 2017年05月12日 21:59:48

linux sed命令,如何替换换行符“\n”

在一次sed使用中,执行命令:

sed "s/\n//g" file

发现,没起到任何效果。

后来,经查sed官方用户手册,才得知,sed是按行处理文本数据的,每次处理一行数据后,都会在行尾自动添加trailing newline,其实就是行的分隔符即换行符。

如果非要使用sed命令,实现替换file文本内容的换行符为空的话,那么就要了解sed的分支条件命令,以及了解sed的pattern space模式空间和hold space保持空间。即,连续两行执行一次sed命令,这样就可以把前一行的\n替换完成。

这个基础内容,可以百度,也可以参考下文连接:

Sed and awk 笔记之 sed 篇:高级命令(一)
http://kodango.com/sed-and-awk-notes-part-4
Sed and awk 笔记之 sed 篇:高级命令(二)
http://kodango.com/sed-and-awk-notes-part-5

最终程序和执行结果如下例所示:

qilei@AFAAW-704030720:~$ cat a.txt
a11111
a22222
a33333
qilei@AFAAW-704030720:~$ sed "s/\n//g" a.txt
a11111
a22222
a33333
qilei@AFAAW-704030720:~$ sed ":a;N;s/\n//g;ta" a.txt
a11111a22222a33333
qilei@AFAAW-704030720:~$

实现方法

第一种方法:使用test跳转命令,实现替换换行符

sed ":a;N;s/\n//g;ta" a.txt

N是把下一行加入到当前的hold space模式空间里,使之进行后续处理,最后sed会默认打印hold space模式空间里的内容。也就是说,sed是可以处理多行数据的。

:a和ta是配套使用,实现跳转功能。t是test测试的意思。
另外,还有:a和ba的配套使用方式,也可以实现跳转功能。b是branch分支的意思。

branch和test区别

branch循环到文本结束。比如sed ":a;N;s/\n//g;ba" a.txt,转换成自然语言的描述,就是

while(1) {
 N;
 s/\n//g;
}

test可以根据替换命令的完成是否成功,决定是否跳转。比如sed ":a;N;s/\n//g;ta" a.txt,转换成自然语言的描述,就是

while(state == 1) { #注释:默认state就当是1好了。
 N;
 s/\n//g;#注释:成功,返回state为1;否则返回state=0。此state用于跳转判断。
}
else {
 last; #注释:即退出循环语句。
}

第二种方法:使用branch跳转命令,实现替换换行符

qilei@AFAAW-704030720:~$ sed ":a;N;s/\n//g;$!ba" a.txt
a11111a22222a33333
qilei@AFAAW-704030720:~$

增加$!ba语句,$的意思是最后一行,不跳转到标记a处,即退出命令循环。

同理,也可以用下述命令。

qilei@AFAAW-704030720:~$ sed ":a;$!N;s/\n//g;ba" a.txt
a11111a22222a33333
qilei@AFAAW-704030720:~$
版权声明:iamqilei@qq.com https://blog.csdn.net/u011729865/article/details/71773840

Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)

Sed Sed是一个强大的文本处理工具 可以采用正则匹配,对文本进行插入删除修改等操作 . . . 三 、一个比较有趣的例子 如何替换\n也就是把所有的行都归为一行 第一种方式...
  • Hello_Hwc
  • Hello_Hwc
  • 2014-10-15 21:12:15
  • 46756

用sed命令如何能把一个匹配模式替换为换行符

将空格替换为换行符。 两种方法 1使用\n代替换行符 sed -e 's/ /\n/g' 2 直接使用换行符 s/ /\ /g...
  • heihuifeng
  • heihuifeng
  • 2012-04-04 16:36:51
  • 11226

sed 中如何替换换行符

From: http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n 使用如下解决方案sed: sed...
  • robertsong2004
  • robertsong2004
  • 2014-08-15 17:57:36
  • 10925

sed替换^M为回车

sed -e 's/^M/\n/g' myfile.txt 注意   ^M 使用“CTRL-V CTRL-M”生成,而不是直接键入“^M”。...
  • fcc7619666
  • fcc7619666
  • 2016-07-05 11:31:42
  • 1685

linux/mac批量替换文件中的^M换行符

linux/mac批量替换文件中的^M换行符
  • LRita
  • LRita
  • 2016-09-30 17:02:11
  • 4858

Linux 下换行符转换

Linux和Windows和换行符不一样。Windows下是CRLF(\r\n或0d0a),Linux下是LF(\n或0a)。在Linux下有时会遇到从Windows过来的文本文件,这些文件带了Win...
  • mulangren1988
  • mulangren1988
  • 2017-01-10 19:10:17
  • 6241

shell中将字符中换行符'\n'替换为空格

shell中将字符中换行符'\n'替换为空格
  • guoyajie1990
  • guoyajie1990
  • 2017-06-24 16:23:42
  • 3055

利用sed 命令去掉windows下回车符及空白符

1.去掉所有行的空格 sed  -i 's/ //g'   df.txt 2.去掉所有行的空格 sed  -e 's/ //g'   df.txt  >cwm.txt 3.将每一行拖尾的“...
  • itcdbb
  • itcdbb
  • 2013-12-17 17:29:22
  • 2005

把换行符换为制表符 shell awk

cat filename.log | awk '{printf $0"\t"}'
  • lifeiaidajia
  • lifeiaidajia
  • 2013-03-04 17:50:18
  • 4949

shell将换行符去掉

cat tmp.log 8907 8203 8107 8908 8204 8108 8909 8301 8205 [root@localhost ~]# awk 'BEGIN{...
  • picture1213
  • picture1213
  • 2014-12-29 16:11:09
  • 1470
收藏助手
不良信息举报
您举报文章:linux sed命令,如何替换换行符“\n”
举报原因:
原因补充:

(最多只允许输入30个字)