使用正则表达式重命名与 Bash 中的两个子字符串匹配的文件

问题描述 投票:0回答:1

我需要复制文件并重命名它们。 将“N”替换为我在环境变量中的另一个字符串。

对于以下文件;

myFile_N_something.cfc_

我可以使用正则表达式在 bash 脚本中使用 for/do/done 块来完成此操作;

for files in *.cfc_;
do
        cp "$files" "${files/_N_/_$theID_}";
done

但是... 我还需要从文件名的最末尾去掉尾随的“_”,所以它最终会是;

myFile_32_something.cfc

(假设我的环境变量中有“32”)

我当然可以再做一个单独的步骤...但我希望“提升”我的正则表达式技能,并在可能的情况下用一个命令来完成。

一如既往的感谢!

regex bash
1个回答
0
投票

最近

bash
支持真正的正则表达式与条件表达式的
=~
运算符:

for files in *.cfc_; do
  [[ $files =~ (.*)_N_(.*)_ ]] &&
  cp "$files" "${BASH_REMATCH[1]}_${theID}_${BASH_REMATCH[2]}"
done
© www.soinside.com 2019 - 2024. All rights reserved.