【问题标题】:How can I put tabs in text files from Terminal? [closed]如何在终端的文本文件中放置标签? [关闭]
【发布时间】:2012-07-07 21:00:39
【问题描述】:

当我使用终端查找过去 24 小时内完成的所有工作时,我会得到一个文本文件,其中包含如下行:

ABC 12345 工作于 DATE 完成

DEF 67890 DATE 的另一份工作

GHI 10112 日期的最终作业

这个文本文件最多可以有一百行。我必须将所有这些数据插入 Microsoft Excel 的表格中。为了让我的生活更轻松,我想弄清楚如何在每行的数字后面添加一个制表符。

类似这样的:

echo "ABC 12345 <tab> Job Worked on DATE" >> jobs.txt
echo "DEF 67890 <tab> Another Job on DATE" >> jobs.txt
echo "GHI 10112 <tab> Final Job on DATE" >> jobs.txt

我将如何实现这一目标?

【问题讨论】:

  • 您可能不希望制表符周围有空格。
  • 它不需要是制表符,在MS excel中你可以选择导入的分隔符,你可以选择像','或';'这样可见的东西并使用这些字符编辑文件。

标签: bash shell scripting terminal


【解决方案1】:

您可以按 Ctrl-vTab 键入原始 Tab。


也可以使用$'...' c-string 语法:

echo $'ABC 12345 \t Job Worked on DATE' >> jobs.txt

【讨论】:

  • 是的,但是由于 OP 将所有数据都作为文本,并且只需要对其进行转换,因此重新键入它不是是最好的方法。
  • 你是对的@KeithThompson。这不是我正在做的最好的方法。我选择了上面的帖子,因为他是最简单的方法。
【解决方案2】:

在第二个字段中添加一个标签:

awk '{$2 = $2 "\t"; print}' inputfile  > outputfile

类似,但使用正则表达式:

sed 's/[[:digit:]]\+/&\t/' inputfile > outputfile

【讨论】:

  • 'awk' 和 'sed' 命令有什么作用?
  • @W3Geek:它们都是文本转换过滤器。 awk 尤其是一种成熟的编程语言(sed 可以说也是)。不可能在评论中完全解释它们。如果您的系统有man 命令,请尝试man sed 和/或man awk,或者进行谷歌或维基百科搜索。
  • sed 命令不起作用,至少对我不起作用(GNU sed 4.2.1)。 sed 默认不识别扩展正则表达式(特别是 + 限定符)。如果是这样,您的s/// 命令将用制表符替换 一个数字序列;你想添加一个制表符。
  • @KeithThompson:我已经解决了这两个问题。
  • @W3Geek:你能更具体地回答你的问题吗?这两个命令的作用相同,就是在数字后面加一个制表符。
【解决方案3】:

使用 echo -e 和 \t 作为制表符。像这样:

echo -e "ABC 12345 \t Job Worked on DATE" >> jobs.txt

【讨论】:

  • -e 标志有什么作用?当我回显时,它只会给我一个 -n 标志。
  • @W3Geek:这取决于您使用的是哪个版本的echo。 bash 的内置echo 命令可识别-e,它可以解释某些反斜杠转义字符,包括用于制表符的\t。但并非所有版本的echo 都这样做。 printf 命令是一个更好的选择——但鉴于您已经拥有文本形式的信息,最好使用 sedawk 或类似的东西对其进行转换。
  • 好的,我看看 -e 标志是如何工作的。 =) 但是,它并没有出现在我的“人回声”中。我不明白 sed 或 awk 命令的作用。
  • 关键是“-e”选项,有一次我忘记了这个选项,在文本中得到'\t'
猜你喜欢
  • 2023-03-27
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
相关资源
最近更新 更多