为啥我的 Linux 文本文件(使用 echo 创建)以换行符结尾?我怎样才能删除它? [复制]

Posted

技术标签:

【中文标题】为啥我的 Linux 文本文件(使用 echo 创建)以换行符结尾?我怎样才能删除它? [复制]【英文标题】:Why does my Linux text file (created with echo) end with a newline? How can I remove it? [duplicate]为什么我的 Linux 文本文件(使用 echo 创建)以换行符结尾?我怎样才能删除它? [复制] 【发布时间】:2019-02-28 10:13:32 【问题描述】:

所有专家我都遇到了使用 sed 添加新行的问题

我想在文本文件的末尾添加一行,我试过了

echo "Hello, how are you?" >> myfile.txt

但问题是它创建了额外的空行,如下所示

 1 Hello, how are you?
 2 

所以我希望它会在文本文件行的末尾创建 1 行,如果文本文件中没有行,那么它将创建为第一行,所有下一行将在最后一行之后创建,没有任何空/空白行, TIA

【问题讨论】:

换句话说,它正确地创建了一个单行文本文件,其中每一行都以换行符终止。您似乎来自 Window 背景,文本文件的最后一行不需要(通常不是?)终止。 你在哪里使用sed 可以说,是你的编辑器错误地在那里显示了一行。 为什么有人赞成这个问题?赞成票表明它有用且经过充分研究。我能说的最好的问题不符合任何一个标准。这个问题如何符合标准? 【参考方案1】:

默认情况下,“echo”会添加尾随换行符。使用 "-n" 和 echo 来抑制新行

echo -n "Hello, how are you?" >> myfile.txt

另一种选择是 - 使用printf

printf "Hello,how are you?" >> myfile.txt

【讨论】:

echo -n 没有被 POSIX 指定(确实有任何特定的行为)。改用printf 更安全。请参阅the POSIX standard for the echo command,尤其是应用程序使用部分。 即:printf '%s' "Hello, how are you?" -- 尽管结果不是有效的 UNIX 文本文件(while read 将返回最后一行 f/e 的错误,因为该行不是没有换行符终止符有效)。 @CharlesDuffy:感谢您的通知。相应更新。 :) printf "your string here"而不是printf '%s' "your string here"的问题是,在前一种情况下,内容被视为格式字符串而不是文字,所以你需要小心%标志或其中的反斜杠;在后一种情况下,打印的内容是逐字节的,正是参数中的内容。 @jww 你有什么问题?如果有人想回答或不存在问题,而不是您的问题,我认为您对某事感到不安并且您对这个问题/话题感到愤怒,请处理您自己的事情,谢谢...

以上是关于为啥我的 Linux 文本文件(使用 echo 创建)以换行符结尾?我怎样才能删除它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

LINUX文件内容处理及文本编辑器vim

PHP:为啥我不能正确查看文本?

我的linux定时任务不起作用是为啥?

我的linux定时任务不起作用是为啥?

为啥添加 php 代码后,我的布局变坏了?

Linux常用命令——echo