如何在linux中将目录中所有与A_B_[any number c]_[any number d].R匹配的文件名更改为A_B_[number c]_M_[number d].R?即,在这些匹配的文件名中插入“M”。此目录中还有名为A_B_[any number]_D_[any number].R的文件,这些文件不应受到影响。我试过rename 's/(\d+)_(\d+)/$1_M_$2/' *,但它不工作。
A_B_[any number c]_[any number d].R
A_B_[number c]_M_[number d].R
A_B_[any number]_D_[any number].R
rename 's/(\d+)_(\d+)/$1_M_$2/' *
3z6pesqy1#
试试这个:
rename -n 's/^A_B_(\d+)_(\d+)\.R/A_B_$1_M_$2.R/' A_B_*.R
字符串解释:
's/^A_B_(\d+)_(\d+)\.R/A_B_$1_M_$2.R/'
^
A_B_
(\d+)
$1
_
$2
/A_B_$1_M_$2.R/
A_B_*.R
奖励积分:要确保跳过某些文件,可以使用bash extended globbing:
#!/bin/bash shopt -s extglob rename -n 's/^A_B_(\d+)_(\d+)\.R/A_B_$1_M_$2.R/' A_B_+([0-9])_+([0-9]).R
型
1条答案
按热度按时间3z6pesqy1#
试试这个:
字符串
解释:
's/^A_B_(\d+)_(\d+)\.R/A_B_$1_M_$2.R/'
表示搜索和替换:^
表示文件名的开头A_B_
匹配行首之后的文字字符(\d+)
匹配任意位数,并将结果捕获为$1
_
匹配文本下划线(\d+)
将下一组数字捕获到$2
中/A_B_$1_M_$2.R/
是使用捕获组并在中间注入“M”的替换表达式。A_B_*.R
是一个glob模式,指示要输入到rename中的文件A_B_[any number]_D_[any number].R
的文件将被跳过,因为它与上面的正则表达式不匹配。奖励积分:
要确保跳过某些文件,可以使用bash extended globbing:
型