【问题标题】:Extract version from filename in bash with grep使用 grep 从 bash 中的文件名中提取版本
【发布时间】:2017-01-05 11:28:11
【问题描述】:

我正在编写遍历目录中文件的 bash 脚本。 我需要从一个文件名中提取版本。

至于

grep -Po '(?<=develop.)[^_]+'

在终端中效果很好,在 bash 脚本中它不起作用。

echo $filename | grep -Po '(?<=develop.)[^_]+' # great
version  =  $filename | grep -Po '(?<=develop.)[^_]+' # version: command not found

文件格式

software_1.2.1~develop.3421-1_.deb

我希望输出 3421-1

任何提示?

【问题讨论】:

  • 不工作意味着什么?
  • 文件名的格式是什么?您期望输出的格式是什么?
  • 问题的预期行为:/

标签: bash grep


【解决方案1】:

需要修改:

  • bash 中声明变量时,= 周围没有空格

  • 一些将变量内容写入 STDOUT 的进程,因此您可以使用管道使其在 grep 的 STDIN 上可用,例如echo 此处(或此处字符串 &lt;&lt;&lt;

  • 要将命令的输出保存在变量中,请使用命令替换$()

所以,做:

version=$(echo $filename | grep -Po '(?<=develop.)[^_]+')

虽然在这种情况下您可以不使用双引号而逃脱,但在几乎所有其他情况下,在您的变量扩展周围使用双引号以防止分词和文件名扩展。

【讨论】:

    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多