Bash:将“cat”重定向到不带换行符的文件

JWA*_*pin 7 linux bash command-line newline cat

我有两个文件,我将它们连接成一个文件,但我还在两个文件之间添加用户输入。问题是在第一个文件之后插入换行符,其余部分按预期工作。

touch newFile
cat file1 > newFile
echo -n $userInput >> newFile
cat file2 >> newFile
Run Code Online (Sandbox Code Playgroud)

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

cat file1 | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

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

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

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

daw*_*awg 5

通过这些输入:

userInput="Test Test Test"

echo "Line 1
Line 2
Line 3" >file1

echo "Line 4
Line 5
Line 6" >file2
Run Code Online (Sandbox Code Playgroud)

我会做:

printf "%s%s%s" "$(cat file1)" "$userInput" "$(cat file2)" >newfile
Run Code Online (Sandbox Code Playgroud)

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

我得到:

$ cat newfile
Line 1
Line 2
Line 3Test Test TestLine 4
Line 5
Line 6
Run Code Online (Sandbox Code Playgroud)