【问题标题】:How do you use regex in a bash script如何在 bash 脚本中使用正则表达式
【发布时间】:2019-11-16 09:16:45
【问题描述】:

在 bash 脚本中使用正则表达式时,我遇到了一些非常基本的问题。我正在尝试使用正则表达式来截断 .mkv、.avi 或 .mp4 并将其分配给变量。然后我将使用此变量创建一个文件夹,然后将文件移动到该文件夹​​中。

我试过了:

folder="movie1.mkv" =~ "^\.mkv"

但是当我运行它时,它会抱怨:=~: command not found

我也试过了:

kREGEX='^\.mkv'
folder="movie1.mkv"
[[ $folder =~ $kREGEX ]]

有人可以展示一个完整但简单的脚本,它使用正则表达式将匹配的模式分配给变量吗?

【问题讨论】:

  • 这种情况下,确实需要参数扩展。

标签: regex bash scripting


【解决方案1】:

使用 bash:

folder="movie1.mkv"
[[ "$folder" =~ (.*)\. ]] && echo "${BASH_REMATCH[1]}"

这会将变量$folder 的内容与正则表达式进行比较。 (.*)\. 将点 (\.) 之前的所有 (.*) 保存到数组 BASH_REMATCH 的字段 1。如果正则表达式匹配,则打印${BASH_REMATCH[1]} 的内容。

输出:

电影1

见:The Stack Overflow Regular Expressions FAQ

【讨论】:

  • 这就像一个魅力。不幸的是,我不知道它是如何工作的,但我看到你已经链接了一些我可以阅读的文档。任何解释也将不胜感激。
【解决方案2】:

你不需要正则表达式,使用参数扩展运算符:

filename=movie1.mkv
folder=${filename%.mkv}
echo "$folder"

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 2011-11-01
    • 2013-06-06
    • 2011-04-12
    • 2011-05-31
    相关资源
    最近更新 更多