您如何在bash脚本中使用正则表达式

时间:2019-07-05 19:04:02

标签: regex bash scripting

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

我尝试过:

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

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

我也尝试过:

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

有人可以显示使用正则表达式为变量分配匹配模式的完整而简单的脚本吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用bash:

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

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

输出:

movie1

请参阅:The Stack Overflow Regular Expressions FAQ