无法从另一个文件的字符串下的文件中提取字符串

bis*_*n72 3 cat newlines

我在使用cat命令连接文件时遇到了一个奇怪的问题。我有两个文件,每个文件都有一个字符串:

文件 1:

ABC
Run Code Online (Sandbox Code Playgroud)

文件2:

DEF
Run Code Online (Sandbox Code Playgroud)

要么我做,cat file1 file2要么我做cat file1 >> file2。我希望输出如下所示:

ABC  
DEF
Run Code Online (Sandbox Code Playgroud)

但是,我有这样一个有趣的输出:

ABCDEF
Run Code Online (Sandbox Code Playgroud)

我检查了文件,没有多余的空格或字符。但是,当我从字符串的后面手动删除时,我什至看不到一个字符。它工作正常。我想一定有某种我看不到的“隐藏”字符或线条。

它一直困扰着我,因为我有大量的文件要连接。我不能手动做同样的事情。

任何帮助表示赞赏。

mik*_*erv 5

paste可能您处理这个问题的最简单(更不用说非常有效)的方法。

printf abc >file1
printf def >file2
paste -sd\\n file[12]
Run Code Online (Sandbox Code Playgroud)
abc
def
Run Code Online (Sandbox Code Playgroud)

paste-serial调用时,它将依次读取每个命名的输入文件以及paste每个文件中 <tab> 或指定的-d分隔符字符串中每一行的输出。虽然paste总是以\newline结束每个命名 infile 的输出,但这里的-delimiter 也被指定为\newline,因此它基本上只是将cat其输入输出到输出,但每个文件总是以\newline 结尾。


正如 Peter 在下面指出的那样,一个空文件可能会导致paste发出额外的\newline。如果这是一个问题,实际上可以应用相同的方法,sed会这样做:

abc
def
Run Code Online (Sandbox Code Playgroud)
abc
def
Run Code Online (Sandbox Code Playgroud)

但是,现在使用这种方法sed至少使用 GNU )可能会出现不同的问题。任何sed永远写出来\n的另一条线拉前ewline,但如果它是全的连续序列输入文件的最后一行,然后一些sed小号(如GNU)可能无法在最后追加一个换行符。例如,对于我的输入文件,def后面没有换行符。

如果是一个问题,那么......

: > file0
sed '' file[012]
Run Code Online (Sandbox Code Playgroud)

...上述管道应该涵盖您的所有基础。