linux - 从文件中提取一个单词并将文件另存为该单词

标签 linux bash ubuntu scripting grep

我正在使用 Ubuntu Linux 并从文件中提取信息(比如说 filename.log),并希望使用(filename.log)中的一些信息来保存文件。

例子:

The info in the (filename.log) has version_name and date.

当使用 cat 在屏幕上显示此信息时,它将显示:
version_name=NAME
date=TODAY

然后我想将文件保存为 NAME-TODAY.log 并且不知道如何执行此操作。

任何帮助将不胜感激

最佳答案

您可以使用管道字符 | 链接一堆基本的 linux 命令。 .结合一个叫做命令替换的东西(获取一个复杂命令的输出,在另一个命令中使用。语法:$(your command))你可以实现你想做的事情。

这是我想出的,基于你的问题:

cp filename.log $(grep -E "(version_name=)|(date=)" filename.log | cut -f 2 -d = | tr '\n' '-' | rev | cut -c 2- | rev).log

所以这里我用了cp , $() , grep , cut , tr最后是 rev .

既然你说你不知道从哪里开始,让我带你走过这条单线:
  • cp - 用于将 filename.log 文件复制到新文件,
    名称基于 version_name 的值和 date (第 2 步及以上)
  • 命令替换 $()在步骤 1 中完成 cp 命令之前,圆括号之间的整个命令已“解析”。例如在您的示例中,它将是 NAME-TODAY。注意 .log在圆括号之外的末尾为其提供适当的文件扩展名。在您的示例中,此命令的输出将是 NAME-TODAY.log
  • grep -E "(version_name=)|(date=)"带有正则表达式标志的 grep -E能够做我们正在做的事情。匹配任何 包含 version_name=date= .预期输出为:

  • version_name=NAME
    date=TODAY
    
  • cut -f 2 -d =因为我对 version_name 不感兴趣
    ,但在与该字段关联的值中,我使用 cut 在等于字符 = 处拆分行带有标志-d = .然后,我选择带有标志 -f 2 的等号字符(第二个字段)后面的值.预期输出为:

  • NAME
    TODAY
    
  • tr '\n' '-'因为 grep 输出多行,所以我想删除所有新行并用破折号替换它们。预期输出:

  • NAME-TODAY-
    
  • rev | cut -c 2- | rev我正在对这些进行分组。 rev颠倒我创造的词。与 cut -c 2-我删除了从反转单词的第二个字符开始的所有字符。这是必需的,因为我用破折号替换了新行,这意味着我现在有了 NAME-TODAY- .基本上,这只是删除最后一个破折号的额外步骤。查看每个步骤的预期输出:
  • -YADOT-EMAN
    
    YADOT-EMAN
    
    NAME-TODAY
    

    请记住,此值在步骤 2 的命令替换中,因此最终结果将是:
    cp filename.log NAME-TODAY.log

    关于linux - 从文件中提取一个单词并将文件另存为该单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60655414/

    相关文章:

    linux - 哪个更快? `echo` ing 一个变量,或者 `tail` ing 一个长输出文件,或者 `grep` ing 整个东西

    c - 为什么 "Line buffer stdout to ensure lines are written atomically and immediately"

    bash - 从 TREE 命令输出创建目录和文件

    git - 硬链接(hard link)会被破坏吗?

    bash - 从同一 bash 脚本中多次将 stdout 的副本重定向到不同的日志文件

    windows - 将文件从 Ubuntu 远程复制到 Windows 7

    linux - setuid 位实际上是如何在 *nix 中实现的?

    linux - 如果在后台运行,从脚本调用子 shell 不起作用

    node.js - Aws Ubuntu 上的 NodeJs 应用程序在 ipv6 上运行

    linux - 我应该在 Windows 或 Docker 命令行上运行 Docker 命令吗?