共计 571 个字符,预计需要花费 2 分钟才能阅读完成。
shell 下处理文件时,有时候有替换或去掉 \n
换行符号的需求。
今天我遇到了将换行符号替换成实的 \n
字符的需求,有点绕,示例,一篇文章内容为:
line1
line2
需要将其内容变成一行,所有换行符变成字符\n
,如下:
line1nline2
如果直接用
sed -i "s/\n/\\\n/" #\\\n 转义 为 \n 字样
我们会发现替换不了,因为 sed 每次处理完毕一行后有自动添加一行(白忙活.jpg),如之奈何?
如果你 sed 技能熟练一点,知道分支和模式空间,这就好说啦:
sed ":tag;N;s/\n/\\\n/;b tag" file #tag 只是一个标签名随意
是有点头大。说个容易懂的方法吧,利用 echo 不使用 - e 时自动去掉换行符的特点:
echo $(sed "$ ! s/$/\\\n/" flie) > file
$
表示行匹配中的最后一行,$ !
即使取反,表示不匹配最后一行;/$/
不用说,学过正则就知道这是匹配行尾之意,这个命令意思是:
-
将行尾(出了最后一行)变成
\n
(注意这里是实际的字符\n
,转义过了,没有换行符的特殊意义了)。于是有了:line1nline2
-
sed 帮倒忙给你加上
\n
换行符,于是有了:line1n
line2 - echo 输出自动去掉换行,于是有了
line1\nline2
当然,如果只想将换行符号换成空格,那就简单了 echo $(cat file)
即可。
参看我的笔记
正文完