剛開始學習shell腳本,學習時候寫過的一些腳本都是以.sh結尾的,於是想去掉這個結尾,寫了個腳本,以后用着也方便。
腳本如下:
很簡單。掃描當前目錄,然后符合條件的改名。
1 #!/bin/bash 2 for i in *; 3 do 4 newname=`echo $i|sed 's/\.sh$//'` #.要轉義 5 if [ $i != $newname ];then 6 mv $i $newname 7 fi 8 done
補充:
sed的用法。
替換:s/regexp/replacement/
regexp:
^錨定行的開始如:/^sed/匹配所有以sed開頭的行。
$錨定行的結束 如:/sed$/匹配所有以sed結尾的行。
.匹配一個非換行符的字符 如:/s.d/匹配s后接一個任意字符,然后是d。
*匹配零或多個字符 如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行。
[]匹配一個指定范圍內的字符,如/[Ss]ed/匹配sed和Sed。
[^]匹配一個不在指定范圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。
\(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。
&;保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。
\<;錨定單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。
\>;錨定單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\{m\}重復字符x,m次,如:/0\{5\}/匹配包含5個o的行。
x\{m,\}重復字符x,至少m次,如:/o\{5,\}/匹配至少有5個o的行。
x\{m,n\}重復字符x,至少m次,不多於n次,如:/o\{5,10\}/匹配5--10個o的行。
其他例子:
do
newfile =`echo $i | sed 's/^./q/'`
mv $file $newfile
done
說到底就是用“for 循環 + 組合命令處理”的思路來實現文件批量重命名滴。