【问题标题】:newline after cat multiple txt filescat 多个 txt 文件后的换行符
【发布时间】:2015-02-05 12:54:02
【问题描述】:

我正在尝试使用 bash 从几个单行文本文件中读取数据,每个文件都在自己的目录中,然后将它们输出到一个主文件中,每个文件都在一个新行中。

我的输入文件的数据结构是这样的;

Store# online backoffice win7

我使用 find 遍历每个目录,并将文件内容分类到一个变量中。问题是我似乎无法让每次通过都将数据放在换行符上。这是我的代码;

#!/bin/bash

#Find all sites
stores=$(find /home/sites*/ -maxdepth 0)


for store in $stores; do
  final=${final}$(cat ${store}\processors.txt)"\n"
done

printf "${final}" > ~/master.txt

我在主文件中得到的是

Store# online backoffice win7Store# online backoffice win7

【问题讨论】:

  • 看来你只想要cat /home/sites*/processors.txt > ~/master.txt。你是在 Windows 机器上阅读你的文件 master.txt 吗?
  • 是的,在 Windows 机器上阅读。
  • 您可能需要使用 unix2dos 实用程序将 unix 换行符转换为 dos 换行符,或者将您的编辑器设置为处理 unix 换行符(如果您有一个不错的编辑器,它应该是可行的)。
  • 您应该在向其中添加新文本时引用${final},否则您会丢失所有换行符。而且无论如何您都会丢失shell命令中的换行符。

标签: bash newline cat


【解决方案1】:

你可以用这个单行替换你的脚本:

find /home/sites* -name "processors.txt" -exec cat {} + > ~/master.txt

由于您将在 Windows 机器上阅读,您可能需要在行尾插入回车:

 find /home/sites* -name "processors.txt" -exec cat {} + | sed -e 's/$/\r/' > ~/master.txt

【讨论】:

  • 谢谢!我现在就试试看
  • find /home/sites* -name "processors.txt" -exec cat {} + > ~/master.txt 有效。谢谢!
  • @3030tank,不客气。请接受答案:)
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 2019-12-05
相关资源
最近更新 更多