regex - 用正则表达式重复替换 Bash 字符串

标签 regex string bash replace repeat

我有一个文件:filename_20130214_suffix.csv 我想替换 bash 中的 yyyymmdd 部分。这是我打算做的:

file=`ls -t /path/filename_* | head -1`
file2=${file/20130214/20130215}
#this will not work
#file2=${file/[0-9]{8}/20130215/}

最佳答案

问题是参数扩展不是使用正则表达式,而是模式或globs(比较正则表达式“filename_..csv”和glob“filename_.csv”的区别)。 Glob 无法匹配固定数量的特定字符串。

但是,您可以在 bash 中启用扩展模式,这应该与您想要的足够接近。

shopt -s extglob    # Turn on extended pattern support
file2=${file/+([0-9])/20130215}

您不能恰好匹配 8 个数字,但是 +(...) 可以让您匹配括号内的一个或多个模式,这应该足以满足您的用例。

因为在这种情况下你想要做的就是替换 _ 字符之间的所有内容,你也可以简单地使用

file2=${file/_*_/_20130215_}

关于regex - 用正则表达式重复替换 Bash 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14912561/

相关文章:

bash - 如何在 Bash 中强制对 printf 参数进行十进制解释而不是八进制

bash - 如何确定 Bash 的 "exit immediately"选项 (set -e) 何时被忽略

regex - perl,将字符附加到第i个捕获组

regex - Perl:查找变量的值是否与数组中的值匹配

java - StringBuilder中append的参数是一个新的String对象,会不会被垃圾回收?

c++ - 如何将字符串转换为一系列整数?

java - 如何在 Java 中使用正则表达式提取顺序未知的命名组?

java - 正则表达式仅匹配字符串中的一个字符序列

Python 逻辑 - 使用句点居中文本

bash - shell 脚本错误