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



我使用的是UbuntuLinux,正在从文件(比如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$()grepcuttr,最后是rev

既然你说你不知道从哪里开始,让我带你走过这句话:

  1. cp-用于将filename.log文件复制到新文件中,名称基于version_namedate的值(步骤2及以上(
  2. 命令替换$()在完成步骤1中的cp命令之前,圆括号之间的整个命令被"解析"。例如,在您的示例中,它将是NAME-TODAY。注意圆括号外末尾的.log,为其提供适当的文件扩展名。在您的示例中,此命令的输出将是NAME-TODAY.log
  3. grep -E "(version_name=)|(date=)"grep带有regexp标志-E,可以做我们正在做的事情。匹配任何包含version_name=date=行。预期输出为:
version_name=NAME
date=TODAY
  1. cut -f 2 -d =,因为我对version_name不感兴趣,但在与该字段相关联的值中,我使用cut来分割具有标志-d =的等于字符=处的行。然后,我选择带有标志-f 2的等于字符(第二个字段(后面的值。预期输出为:
NAME
TODAY
  1. tr 'n' '-'因为grep在多行上输出,所以我想删除所有新行并用短划线替换它们。预期输出:
NAME-TODAY-
  1. rev | cut -c 2- | rev我正在对这些进行分组。rev反转了我创建的单词。使用CCD_ 27,我剪切掉从反转字的第二个字符开始的所有字符。这是必需的,因为我用短划线替换了新行,这意味着我现在有了NAME-TODAY-。基本上,这只是删除最后一个破折号的额外步骤。请参阅每个步骤的预期输出:
-YADOT-EMAN
YADOT-EMAN
NAME-TODAY

记住这个值在步骤2的命令替换中,所以最终结果是:

cp filename.log NAME-TODAY.log

我通过执行以下操作解决了这个问题:grep filename.log>/tmp/file.info&filename=$(echo$(grep"版本名称"/tmp/filenname.info|cut-d"-f 3(-$(grep"日期"/tmp-filenname.info | cut-d"-f 3(-$filename.log

最新更新