まず、これを行う最も簡単な方法は、prenameコマンドまたはrenameコマンドを使用することです。
Ubuntu、OSX(Homebrewパッケージrename
、MacPortsパッケージp5-file-rename
)、またはperlの名前変更(prename)を使用するその他のシステムの場合:
rename s/0000/000/ F0000*
または、RHELなどのutil-linux-ngから名前が変更されたシステムの場合:
rename 0000 000 F0000*
これは、同等のsedコマンドよりもはるかに理解しやすいです。
ただし、sedコマンドの理解については、sedのマンページが役立ちます。man sedを実行して&を検索すると(/コマンドを使用して検索)、s / foo / bar / replacementsの特殊文字であることがわかります。
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 / replace /で実際に何が変更されているかを確認できるため、読みやすくなります。また、誤って2回実行した場合でも、ファイル名から文字が吸い出され続けることはありません。