![在两个模式之间插入字符串](https://linux22.com/image/1473373/%E5%9C%A8%E4%B8%A4%E4%B8%AA%E6%A8%A1%E5%BC%8F%E4%B9%8B%E9%97%B4%E6%8F%92%E5%85%A5%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我想更改名称如下的文件:
d1-a2_A1_B1.txt
abcd_A90_B2.txt
我想_FOO
在第一个_A[0-9]\+
和_B[0-9]
第二个之间插入文件名
d1-a2_A1_FOO_B1.txt
abcd_A90_FOO_B2.txt
但我的正则表达式不起作用:
for f in $(ls); do mv $f \`echo $f | sed -e s/\(.*_A[0-9]\+\)\(_B[0-9].*\)/$1_FOO$2/\`; done
我尝试用一个字符串:
echo abcd_A90_B2.txt | sed -e s/\(.*_A[0-9]\+\)\(_B[0-9].*\)/$1_FOO$2/
好的:这有效:
echo abcd_A90_B2.txt | sed -e 's/\(_A[0-9]\+\)\(_B[0-9]\)/\1_FOO\2/'
答案1
答案2
您可以通过以下方式避免使用 sed 和其他字符串操作mmv
:
$ mmv -m -n '*_A*_B*.txt' '#1_A#2_FOO_B#3.txt'
abcd_A90_B2.txt -> abcd_A90_FOO_B2.txt
d1-a2_A1_B1.txt -> d1-a2_A1_FOO_B1.txt
(一旦您确认所有文件均已匹配并按需要重命名,请删除-n
或将其替换为,以实际重命名文件。-v