批重命名regex不起作用的文件

批重命名regex不起作用的文件,regex,linux,Regex,Linux,我在linux服务器上有很多文件都是这种格式的 text\u text\u mixture lettersnumbers.file例如Hesperocyparis\u goveniana\u E00196073A.bam.bai或Hesperocyparis\u forbesii\u RBGEH19\u bwa\u out.txt。我想将第一个下划线改为连字符,并保留所有其他内容,使其看起来像text-text\u mixturelettersnumbers.file 我尝试了rename-n'

我在linux服务器上有很多文件都是这种格式的
text\u text\u mixture lettersnumbers.file
例如
Hesperocyparis\u goveniana\u E00196073A.bam.bai
Hesperocyparis\u forbesii\u RBGEH19\u bwa\u out.txt
。我想将第一个下划线改为连字符,并保留所有其他内容,使其看起来像
text-text\u mixturelettersnumbers.file

我尝试了
rename-n's/(\w+)(\w+)/$1-$2/'*
和许多不同的版本,但什么都没有发生。有人能指出我做错了什么吗

谢谢

Markus没有仅显示结果的选项。这是非常基本的

如果要列出扩展名前包含两个下划线的文件,请使用

for f in *_*_*.*; do
  echo "$f => ${f/_/-}";
done
要实际重命名,请使用
mv

for f in *_*_*.*; do
  mv -- "$f" "${f/_/-}";
done

“${f//-}”
将变量
f

中的第一个
-
替换为
-
。此命令运行良好。有两个工具名为
重命名
,一个来自util linux,另一个用Perl编写。您的语法看起来像util linux,但请检查
rename--version
以确保。@Thomas给定
s///
我猜是perl语法。@jhnc嗯,是的,绝对正确,不确定我在想什么。perl版本:
rename s/-/?*\u*
;util linux版本:
重命名-?*****
。请注意,
-n
表示“不做任何事情”…当我将上述命令与
echo一起使用时,它会完全按照我的要求执行。但是,当我想用
mv
执行它时,我得到以下错误
mv:xantocyparis\u vietnamensis\u E00160382A.fasta=>xantocyparis-vietnamensis\u E00160382A.fasta'之后缺少目标文件操作数
。当所有文件都已位于目标文件夹中时,我必须在何处插入目标文件夹?@Markus不知道问题是什么,我知道当文件以连字符开头时可能会出现问题,因此我在
mv
之后添加了
--
。请确保键入的命令正确,并且在命令和参数之间有规则的(非硬/软)空格。感谢您指出这一点。添加
--
产生了所有的不同。我首先复制并粘贴了
echo
命令以查看发生了什么,然后将
echo
替换为
mv
,但没有注意到它后面还有
--
。。。