首页 > 解决方案 > Bash:将`cat`重定向到没有换行符的文件

问题描述

我确信这个问题已经在某个地方得到了回答,但是在搜索它时,我找不到我的确切情况。我有两个文件要连接成一个文件,但我也在两个文件之间添加用户输入。问题是在第一个文件之后插入了换行符,其余部分按需要工作。

touch newFile
cat file1 > newFile
echo -n $userInput >> newFile
cat file2 >> newFile

将 file1 添加到 newFile 时,如何防止或删除换行符?如果我cat file1似乎添加了一个换行符,cat但我看到的所有内容都cat表明它没有这样做。如果我vim file1在文件末尾没有空行表明换行符是文件的一部分,那么要么cat实际上是添加换行符,要么重定向>正在执行它,或者echo在其输出的开头添加换行符,在这种情况下,没有一个是可取的。我看到的一种解决方案是使用

cat file1 | tr -d '\n'

但这会丢弃文件中的所有换行符,这也是不可取的。所以,重复我的问题:

如何cat file1进入新文件并添加用户输入而不在它们之间添加换行符?

cat不是必需的,但我不熟悉printf,所以如果这是解决方案,请详细说明其用途)。

标签: linuxbashcommand-linenewlinecat

解决方案


使用这些输入:

userInput="Test Test Test"

echo "Line 1
Line 2
Line 3" >file1

echo "Line 4
Line 5
Line 6" >file2

我会做:

printf "%s%s%s" "$(cat file1)" "$userInput" "$(cat file2)" >newfile

创建>newfile相当于touch在您的第一步中添加内容。这样做更容易看出意图。

我得到:

$ cat newfile
Line 1
Line 2
Line 3Test Test TestLine 4
Line 5
Line 6

推荐阅读