我确定这个问题已经在某处得到了回答,但是在搜索时我找不到确切的情况。我有2个文件,这些文件将串联到一个文件中,但是我还在两个文件之间添加了用户输入。问题是在第一个文件之后插入了换行符,其余的按需工作。
touch newFile
cat file1 > newFile
echo -n $userInput >> newFile
cat file2 >> newFile
当将file1添加到newFile时,如何防止或删除换行符?如果我cat file1
似乎在cat
处添加了换行符,但我看到的关于cat
的一切都表示它没有这样做。如果我vim file1
在文件末尾没有空白行,则表明换行是文件的一部分,因此cat
实际上是在添加换行符,或者是重定向{{1} }正在执行此操作,或者>
在其输出的开头添加换行符,在这种情况下都不希望使用任何换行符。我看到的一种解决方案是使用
echo
但是会丢弃文件中的所有换行符,这也是不希望的。因此,重复我的问题:
我如何cat file1 | tr -d '\n'
进入新文件并添加用户输入而不在它们之间添加换行符?
(cat file1
不是必需条件,但我不熟悉cat
,因此,如果这是解决方案,请详细说明其用法。)
答案 0 :(得分:2)
与所有其他Unix工具一样,Vim认为\n
是行终止符,而不是行分隔符。
这意味着最后一段文本后的换行符将被视为最后一行的一部分,并且不会显示其他空白行。
如果没有尾随换行符,加载文件时,Vim会在状态栏中显示[noeol]
:
foo
~
~
~
~
~
"file" [noeol] 1L, 3C 1,1 All
^---- Here
所以不,换行符绝对是文件的一部分,不会被bash以任何方式添加。
如果要剥离所有尾随的换行符,可以将其作为命令扩展的副作用:
printf '%s' "$(<file1)" >> newfile
答案 1 :(得分:1)
使用以下输入:
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
答案 2 :(得分:0)
touch newFile
echo -n "$(cat file1)" > newFile
echo -n $userInput >> newFile
cat file2 >> newFile
做到了。