【发布时间】:2023-03-22 03:40:01
【问题描述】:
我确信这个问题已经在某个地方得到了回答,但是在搜索它时,我找不到我的确切情况。我有两个文件要连接成一个文件,但我还在两个文件之间添加用户输入。问题是在第一个文件之后插入了一个换行符,其余部分按需要工作。
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不熟悉,所以如果这是解决方案,请详细说明它的使用)。
【问题讨论】:
-
printf '%s' "$userInput"比echo -n "$userInput"更可靠;如果您看到the POSIX spec forecho,您会注意到-n使行为实现定义,并且标准的APPLICATION USAGE部分建议printf代替echo -n或任何echo调用反斜杠转义序列。 -
不知道为什么这个问题被否决了,显然我误解了一些通过进行合理数量的额外研究无法弄清楚的事情,我对我的问题进行了足够的研究以认识到目前的答案不足以回答我的具体问题。通过问这个问题,我学到了很多新东西,因此它达到了它的目的。 @CharlesDuffy 感谢您的帮助和详尽的解释!我不是一个完整的 BASH/UNIX 菜鸟,但我还有很多东西要学。
标签: linux bash command-line newline cat