regex - bash 脚本正则表达式匹配

标签 regex bash shell awk grep

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

files=( "site_hello.xml" "site_test.xml" "site_live.xml" )

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

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

re.match("site_(.*)\.xml")

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

不幸的是,这个项目需要在 bash 中,所以 -- 我怎样才能在 bash 脚本中做这种事情?我不太擅长 grep、sed 或 awk。

最佳答案

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

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

编辑:纠正这两个错别字后,它似乎确实有效:)

关于regex - bash 脚本正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903503/

相关文章:

linux - 如何在bash中将结果转换为整数

linux - 使用 bash 遍历文件(和目录)名称

perl - df 输出问题

ios - 从 NSString 中删除 WYSIWYG 编辑器标记

c# - 使用正则表达式匹配 C# Unicode 标识符

linux - 显示未登录的用户进程 linux bash 脚本

python - 为什么两个相同的字符串但以不同的方式连接在使用 python 调用的 shell 上下文中会产生不同的结果?

regex - 根据匹配的模式替换匹配项

python - 您可以使用 Python 正则表达式从偏移量向后搜索吗?

linux - 将 "module"别名(调用 modulecmd)从 tcsh 适配到 bash