Sed
“重命名”正則表達式中的反向引用
我在一個目錄中有很多名為“bar_foo.txt”的文件,我想將它們重命名為“foo_bar.txt”。
In
sed
和vim
to this 的正則表達式類似於's/\(bar\)_\(foo\)/\2_\1/g'
,在替換中反向引用搜尋。
- 有沒有辦法做到這一點
rename
?我已經看到了一些 hacksls
到sed
,bash
但這顯然不是一個了不起的方法。- 還有其他工具可以做到這一點嗎?
- 正則表達式的“sed 和 vim 風味”有名稱嗎?
如果你有
rename
Perl 正則表達式的實現(如在 Debian/Ubuntu/… 或prename
Arch Linux 上),你需要$1
代替\1
. 此外,在擷取括號時沒有反斜杠:rename 's/(.*)_(.*)/$2_$1/' *_*
如果沒有,你必須自己實現它。
#! /bin/bash for file in *_* ; do left=${file%_*} right=${file##*_} mv "$file" "$right"_"$left" done
注意:正如所寫,兩個命令都重命名
a_b_c
為c_a_b
. 要獲取b_c_a
,請在第一種情況下將第一個擷取組更改為.*?
,或者在第二種情況下更改%
為%%
和。##``#