为啥我的 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 创建)以换行符结尾?我怎样才能删除它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章