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

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

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

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

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

sed替换^M为回车

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

sed 中如何替换换行符

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

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

shell中将字符中换行符'\n'替换为空格
  • guoyajie1990
  • guoyajie1990
  • 2017年06月24日 16:23
  • 1547

利用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
  • 1843

sed 比较实用的(去掉windows下回车符及空白符)

利用sed 命令去掉windows下回车符及空白符windows下的回车符为 /r/n   而unix下的回车符是 /n1.去掉所有行的空格sed -i s/ //g   df.txt 2.去掉所有行...
  • shenghuiping2001
  • shenghuiping2001
  • 2009年12月07日 22:11
  • 3454

linux----回车换行

一:回车换行符号 ASCLL码 意义 \r 13 回车CR \n ...
  • uagvdu
  • uagvdu
  • 2017年01月03日 17:11
  • 4465

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

linux/mac批量替换文件中的^M换行符
  • LRita
  • LRita
  • 2016年09月30日 17:02
  • 4281

linux shell脚本替换反斜杠

1) windows中的脚本,路径均是反斜杠\ , 在linux中,路径是斜杠/,需要将反斜杠替换为斜杠,使用sed命令,如下            sed -i "s:\\\:\/:g"  /hom...
  • lao_pei
  • lao_pei
  • 2016年07月11日 15:34
  • 3420
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux sed命令,如何替换换行符“\n”
举报原因:
原因补充:

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