2009-07-15 5 views
2

誰かが%:s/\([0-9]*\)_\(*\)/\2を編集してファイルの名前を変更できるようにしてください。たとえば、ファイル名が5555_word_word.jpgの場合、ファイル名はword_word.jpgになります。私はとても近いと感じる!%:s/([0-9] * )_ (* )/ 2はファイル名を変更しません

:%s/\([0-9]*\)_\(.*\)/\2 

.は、任意の文字(第2グループの一部)と一致し、*は貪欲それらの任意の量と一致します:

答えて

3

これを試してみてください。元の正規表現にそのディレクティブがありませんでした。また、_word_word.txtという形式のファイルの名前をword_word.txtに変更します。あなたは(おそらく良いアイデア)と一致する数字を必要とする場合、使用:

:%s/\([0-9]\+\)_\(.*\)/\2 

\+ディレクティブは、1つの以上のインスタンスと一致することを意味します。あなたが簡素化し、それだけで有数の数字とアンダースコアを削除したいことがあり

+0

「word_word.jpg」がある場合、先頭の「[0-9]」はオプションなので「word.jpg」になります。 '*'のような貪欲な演算子には注意が必要です。 –

+0

'()'をバックスラッシュする必要があるため、これらのどちらも機能しません。 '+'も同様です。 –

+0

@ブライアン:OPの括弧の使用によって判断すると、私はあなたが正しいと思うだろうが、これが動作するように正規表現の "魔法"設定を変更することは可能です(私は) – rmeador

6

s/^[0-9]+_// 
3

あなたのバージョンは結構ですが、あなたは時間を忘れて、あなたはおそらく、行の先頭にまたはそれを固定する必要があり^または\<のいずれかを使用する単語境界。

:%s/^\([0-9]*\)_\(.*\)/\2/ 

\vを使用して、これらのスラッシュの一部をクリーンアップすることができます。

:%s/\v^([0-9]*)_(.*)/\2/ 

キャプチャグループを避けるには、\zeを使用できます。

:%s/^[0-9]*_\ze.*// 

しかし、末尾の.*は、何にもマッチするので余計です。セスのバージョンを使うのが最も簡単です。

+0

+1のために私はそれを知らなかったと私はそれが便利になるかもしれないがわかります – Blixtor

関連する問題