【问题标题】:Printing formatted date line output to file in Bash script将格式化的日期行输出打印到 Bash 脚本中的文件
【发布时间】:2019-12-27 01:39:25
【问题描述】:

这是我在此线程上发布的上一个问题的后续:Concatenating text and command output in Bash script to output to file

到目前为止,我正在使用以下行将日期标题附加到日志文件中,稍后我会向其中添加更多数据:

date '+---%a %b %e %H:%M:%S %Z %Y---' >> "./Logs/Log.txt"

这很好用,只是我想在标题的上方和下方添加一个空行,以更好地将文本与标题区分开来。我假设我只是在某处添加一个 '\n' 但将其放入日期命令的格式字符串中只是将其逐字附加到进入文件的文本中。

编辑:

当我运行上述命令时,我在日志文件中得到以下输出:

---Wed Aug 21 14:09:33 EDT 2019---

但是我想要做的是在上面的行之前和之后添加一个空行来分隔数据。

更新:

好的,感谢用户 Léa Gris 的反馈。更正后的行现在显示为:

date '+%n---%a %b %e %H:%M:%S %Z %Y---%n' >> "./Logs/Log.txt"

【问题讨论】:

  • 请考虑阅读有关格式代码的日期手册页。 LC_TIME=POSIX date '+%n---%a %b %e %H:%M:%S %Z %Y---%n' >> "./Logs/Log.txt"

标签: bash shell scripting formatting freebsd


【解决方案1】:

在行尾和行首添加%n

date '+%n---%a %b %e %H:%M:%S %Z %Y---%n' >> Log.txt

来自man dateman,你最好的朋友)

%n     a newline

【讨论】:

    【解决方案2】:

    免去尝试欺骗date 格式化您的非日期相关数据的麻烦。

    您可以在 here 文档中使用命令替换作为一个简单的小模板:

    cat >> "./Logs/Log.txt" << EOF
    
    --- $(date) ---
    Yours truly, $(whoami)
    
    EOF
    

    【讨论】:

      【解决方案3】:

      您已标记此bash,但date 命令是操作系统的一部分,而不是shell 中的内置命令。

      如果您运行的是 bash 版本 4 或更高版本(您可以echo $BASH_VERSION 进行检查),那么您可以使用带有printf 内置命令的日期格式。

      试试:

      printf '\n---%(%a %b %e %H:%M:%S %Z %Y)T---\n\n'
      

      或者只是为了好玩:

      printf '%(%n---%+---%n%n)T'
      

      请注意,如果您在 printf 格式中添加其他占位符,则需要为此时间指定一个实际数字,或为“现在”指定 -1

      printf '\n---%(%+)T--- %s\n\n' -1 "Hello"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 2013-04-18
        • 2023-03-10
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多