まず、これを行う最も簡単な方法は、prename または rename コマンドを使用することです。
Ubuntu、OSX (Homebrew パッケージrename
、MacPorts パッケージp5-file-rename
)、または perl rename (prename) を使用するその他のシステム:
rename s/0000/000/ F0000*
または、RHEL などの util-linux-ng から名前を変更するシステムの場合:
rename 0000 000 F0000*
これは、同等の sed コマンドよりもはるかに理解しやすいものです。
ただし、sed コマンドを理解するには、sed マンページが役立ちます。man sed を実行して & を検索すると (検索に / コマンドを使用)、s/foo/bar/ 置換の特殊文字であることがわかります。
s/regexp/replacement/
Attempt to match regexp against the pattern space. If success‐
ful, replace that portion matched with replacement. The
replacement may contain the special character & to refer to that
portion of the pattern space which matched, and the special
escapes \1 through \9 to refer to the corresponding matching
sub-expressions in the regexp.
したがって、\(.\)
で参照できる最初の文字に一致し\1
ます。次に.
、常に 0 である次の文字に一致します。次に\(.*\)
、 で参照できる残りのファイル名に一致します\2
。
&
置換文字列は、(元のファイル名)を使用してすべてをまとめ\1\2
ます。これは、0 であった 2 番目の文字を除くファイル名のすべての部分です。
これは、これを行うためのかなり不可解な方法です。何らかの理由で rename コマンドが利用できず、sed を使用して名前を変更したい場合 (または、名前を変更するには複雑すぎることをしていた場合)、正規表現をより明示的にすると、はるかに読みやすくなります。おそらく次のようなものです:
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
s/search/replacement/ で実際に何が変更されているかを確認できると、読みやすくなります。また、誤って 2 回実行した場合でも、ファイル名から文字を吸い出し続けることはありません。