使用grep从bash中提取文件名中的版本

时间:2016-08-29 12:16:54

标签: bash grep

我正在编写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

任何提示?

1 个答案:

答案 0 :(得分:0)

需要修改:

  • =

  • 中声明变量时bash周围没有空格
  • 在STDOUT上写入变量内容的一些过程,因此您可以使用管道使其在grep的STDIN上可用,例如echo此处(或此处为字符串<<<

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

所以,做:

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

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