我正在使用 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/