【问题标题】:How do I replace substring in a file name?如何替换文件名中的子字符串?
【发布时间】:2014-12-25 23:24:54
【问题描述】:

我正在尝试使用 sed 将目录中每个文件的子字符串“Dog_1”替换为“Dog_2”。

文件名如下所示:Dog_1_interictal_segment_0472.csv

这是我正在使用的命令:

sed -i '' s/Dog_1/Dog_2/g *.csv

由于某种原因,子字符串没有被替换。

【问题讨论】:

  • '' 实际上应该包含这个表达式。如sed -i 's/Dog_1/Dog_2/g' *.csv
  • 你的替换字符串 literally Dog_1Dog_2,还是需要 shell 转义等的其他字符串?
  • @Rubens 虽然我同意应该引用 sed 脚本,但实际上并不需要它。这些空引号的原因是 -i 在 OS X 上采用了非可选后缀,因此 -i '' 在没有备份文件的情况下就地编辑。
  • @bux 不知道-i 在 OS X 上有一个可选参数。感谢您指出这一点!

标签: regex macos sed


【解决方案1】:

哦,您要重命名文件吗?您不能为此使用sed;更改文件的内容,而不重命名它们。以下是我可能会如何进行重命名:

for a in Dog_1*.csv; do
  mv "$a" "Dog_2${a#Dog_1}"
done

【讨论】:

  • 很好,只是错过了名称中有两次 Dog_1 的文件(通常希望不大)
【解决方案2】:

由于问题涉及重命名文件,您最好renameing 他们。 此应用程序的语法与sed's 非常相似:

rename 's/Dog_1/Dog_2/' *.csv

如果是这样的话,你也可以执行全局重命名:

rename 's/Dog_1/Dog_2/g' *.csv

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2014-06-09
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多