Sed

“重命名”正則表達式中的反向引用

  • January 20, 2016

我在一個目錄中有很多名為“bar_foo.txt”的文件,我想將它們重命名為“foo_bar.txt”。

Insedvimto this 的正則表達式類似於's/\(bar\)_\(foo\)/\2_\1/g',在替換中反向引用搜尋。

  1. 有沒有辦法做到這一點rename?我已經看到了一些 hackslssedbash但這顯然不是一個了不起的方法。
  2. 還有其他工具可以做到這一點嗎?
  3. 正則表達式的“sed 和 vim 風味”有名稱嗎?

如果你有renamePerl 正則表達式的實現(如在 Debian/Ubuntu/… 或prenameArch Linux 上),你需要$1代替\1. 此外,在擷取括號時沒有反斜杠:

rename 's/(.*)_(.*)/$2_$1/' *_*

如果沒有,你必須自己實現它。

#! /bin/bash
for file in *_* ; do
   left=${file%_*}
   right=${file##*_}
   mv "$file" "$right"_"$left"
done

注意:正如所寫,兩個命令都重命名a_b_cc_a_b. 要獲取b_c_a,請在第一種情況下將第一個擷取組更改為.*?,或者在第二種情況下更改%%%和。##``#

引用自:https://unix.stackexchange.com/questions/256412