粘贴命令无法识别脚本中的换行符(/ n)

时间:2016-08-29 20:03:15

标签: linux shell unix sed command

我正在使用以下代码将标题“Both”和空白行添加到文件中。

sed -i '1i Both \n' file1

当我打开文件时,我可以看到换行符。

但是,当我使用以下命令粘贴文件时,它会删除shell中的换行符。

paste file1 file2 | column -s $'\t' -t | sed '1i\\'

任何人都知道为什么粘贴不能识别它?

更具体地说,正在识别/ n字符,但如果新行在同一行中,则粘贴将消除换行符。

输出的是什么:

Header1     Header2
abc         def
ghi         jkl

应该是什么:

Header1     Header2

abc         def
ghi         jkl

我知道它删除了换行符,因为当我只在一个文件前面添加一个新行时,它看起来像这样:

Header1     Header2               
            def
abc         jkl
ghi

作为临时解决方法,我正在使用sed -i '1i Both \n----' file1强制粘贴以打印新行,因为它不是空的:

Header1     Header2
----        ----        
abc         def
ghi         jkl

而且,它保留了换行符,所以我猜,在将两个文件粘贴在一起时,如何将所有新行保留在一行?

1 个答案:

答案 0 :(得分:1)

这里不需要sed。观察:

# defining functions here to make this a standalone reproducer
# remove these and change <(file1) to just file1 to use files instead
file1() { printf '%s\n' Header1 abc ghi; }
file2() { printf '%s\n' Header2 def jkl; }

# use braces to create a code block, and redirect that whole block to your output file
{
  printf '%s\n' Both ''                        # header, then blank line
  paste <(file1) <(file2) | column -s $'\t' -t # body content
} >out.txt                                     # redirection

...显然,如果你根本没有将输出重定向到文件,你不需要重定向,也不需要块。这也更有效:column不需要读取sed的输出,然后由php artisan make:migration page写入。