【问题标题】:Unwanted line break using echo and cat使用 echo 和 cat 不需要的换行符
【发布时间】:2014-04-24 14:03:45
【问题描述】:

我正在尝试在文件开头添加一行,使用

echo 'time/F:x1:x2' | cat - file.txt>newfile.txt

但这会在新文件中的每一行产生换行符(添加的“时间/F:x1:x2”行之后除外)。关于如何避免这种情况的任何想法?

【问题讨论】:

  • 等等,“在每一行产生换行符”是什么意思?输入文件是什么样的,输出文件是什么样的?
  • 抱歉,措辞不好,我提出了一个新问题stackoverflow.com/questions/22502013/…@glennjackman
  • 不要提出新问题;编辑旧的。

标签: linux macos bash echo cat


【解决方案1】:

使用-n 禁用尾随换行符:

echo -n 'time/F:x1:x2' | cat - file.txt > newfile.txt

还有其他方法:

sed '1s|^|time/F:x1:x2|' file.txt > newfile.txt

【讨论】:

  • 或使用printf:printf "%s" 'time/F:x1:x2 | ...
  • 让我澄清一下:我应该写“空行”,而不是“换行符”。因此,如果我的输入是 line1 {linebreak} line2 {linebreak} line3 我的输出将是 time/F:x1:x2 {linebreak} line1 {linebreak} empty line {line break} line2 {line break} empty line {line break} line3 我想要时间/F:x1:x2 之后的第一个换行符,而不是空行。
【解决方案2】:

怎么样

{ echo 'time/F:x1:x2'; cat file.txt; } >newfile.txt

sed '1i\
time/F:x1:x2' file.txt > newfile.txt

【讨论】:

  • 我认为{ echo …; cat; } 复合命令仍会产生不需要的换行符。
  • 不应该是echo -n吗? +1 用于使用{} 命令分组以使其更具可读性
  • 问题不明确:“我正在尝试在文件开头添加一行”
【解决方案3】:

实际上,如果您使用 bash,您甚至不需要 echo 和管道。只需使用此处的字符串:

<<< 'time/F:x1:x2' cat - file.txt > newfile.txt

【讨论】:

  • 这将插入一个换行符,与echo 相同,没有-n,不是吗?
  • 嗯,假设确实如此。我会把它留在这里,直到 OP 澄清 在每一行产生换行符
猜你喜欢
  • 2014-04-25
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2015-04-23
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多