bash脚本正则表达式匹配

Bar*_*erg 3 regex bash shell awk grep

在我的bash脚本中,我有一个像.的文件名数组

files=( "site_hello.xml" "site_test.xml" "site_live.xml" )
Run Code Online (Sandbox Code Playgroud)

我需要提取下划线和.xml扩展名之间的字符,以便我可以遍历它们以便在函数中使用.

如果这是python,我可能会使用类似的东西

re.match("site_(.*)\.xml")
Run Code Online (Sandbox Code Playgroud)

然后提取第一个匹配的组.

不幸的是这个项目需要用bash,所以 - 我怎样才能在bash脚本中做这种事情?我对grep,sed或awk不是很好.

jke*_*ian 5

像下面这样的东西应该工作

files2=(${files[@]#site_})   #Strip the leading site_ from each element
files3=(${files2[@]%.xml})    #Strip the trailing .xml
Run Code Online (Sandbox Code Playgroud)

编辑:纠正这两个错别字后,它似乎工作:)