
答案1
for F in *_*; do echo mv -- "${F}" "${F%_*}.${F##*_}"; done
如果輸出看起來正確,則刪除echo
上面的命令。
訣竅是${F%_*}
刪除最後一個_26
並${F##*_}
刪除最後一個之前的所有內容_
。嘗試這些命令看看它是如何工作的。分隔符號現在是:
:
echo "${PATH}"
echo "${PATH%:*}"
echo "${PATH##*:}"
echo "${PATH%:*}_${PATH##*:}"
答案2
使用sed
for file in *_*
do
echo mv $file $( sed 's/\(.*\)_/\1\./' <<< $file)
done
echo
如果您滿意,請刪除。
答案3
sed
您可以使用行尾標記 ( )將最後一個區塊替換為$
。
#/bin/bash
for file in *_* ; do
#any alphanumeric string as suffix
mv $file $( sed 's/_\([A-Za-z0-9]\{1,\}\)$/.\1/' <<< $file )
#alternatively numbers only as in given input sample
mv $file $( sed 's/_\([0-9]\{1,\}\)$/.\1/' <<< $file )
done
AFAIK\{1,\}
前面清單中的「一個或多個」位元是 GNU sed
- 但我不能 100% 確定這個限制。