我将两个文件连接成一个文件,但我还在两个文件之间添加了用户输入。问题是在第一个文件之后插入了换行符,其余部分按需要工作。
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
,所以如果这是解决方案,请详细说明它的用途)。
有了这些输入:
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
像所有其他 Unix 工具一样,Vim 认为
\n
一行 terminator 而不是一行 separator。
这意味着最后一段文本后的换行符将被视为最后一行的一部分,并且不会显示额外的空行。
如果没有尾随换行符,Vim 将在加载文件时在状态栏中显示
[noeol]
:
foo
~
~
~
~
~
"file" [noeol] 1L, 3C 1,1 All
^---- Here
所以不,换行符绝对是您文件的一部分,而不是由 bash 以任何方式添加。
如果你想去掉所有尾随的换行符,你可以这样做作为命令扩展的副作用:
printf '%s' "$(<file1)" >> newfile
touch newFile
echo -n "$(cat file1)" > newFile
echo -n $userInput >> newFile
cat file2 >> newFile
成功了。