web-dev-qa-db-ja.com

角かっこ、中のテキスト、角かっこの前後のスペースを削除する方法は?

名前を変更する必要がある写真がたくさんあります。

[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg

すべての角かっこを削除する必要があります。そうするために、私は thisthis を見つけました。

それらのページのようにsedコマンドを使用すると、角括弧の前後のスペースがまだあります。私の場合、内部のテキスト、前後のスペース、角かっこ自体を削除する必要があります。

Happy Day_001.jpg  
Summer Camp_165.jpg  
Music Fest_58.jpg

[first]  [last]ブラケットを削除するには、sedコマンドを使用してどうすればよいですか?

6
Hidayats

sedは間違ったツールです。ファイルの名前は変更しません。可能なものとペアリングできますが、Perlの renameを使用する方が簡単です

rename -n 's/\[.*?\]//g' *

-nを使用すると、renameはどのような変更が行われるかを示します。 -nなしで実行して、実際にファイルの名前を変更します。 renameはPerlであり、Perlでは、.*?.*のような貪欲な一致ではないため、[^]]*のようなトリックを使用する必要はありません。

周囲の空白も削除するには:

rename -n 's/\s*\[.*?\]\s*//g' *
7
muru

sedを使用してファイルの名前を変更するべきではありませんが、Perlプログラムrenameを使用できます。たとえば、次のようにします。

$ rename -n 's/\[[^]]+\] ([^[]+) \[[^]]+\]/$1/' *
rename([Beach] Music Fest_58 [August].jpg, Music Fest_58.jpg)
rename([Mountain] Summer Camp_165 [May].jpg, Summer Camp_165.jpg)
rename([Wedding] Happy Day_001 [February].jpg, Happy Day_001.jpg)

実際にファイルの名前を変更するには、テスト後に-nを削除します。

ノート

  • s/old/newoldnewに置き換えます
  • \[リテラル[
  • [^[]+[ではない文字
  • (stuff)stuffを保存して、後で$1$2などとして参照できるようにします

これは、ファイル名に一貫性がある場合にのみ機能します。 muruの答え は、はるかに移植性があります。

9
Zanna