Как удалить квадратные скобки, любой текст внутри и пробел после & amp; перед скобками?

У меня есть много фотографий, которые нужно переименовать.

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

Мне нужны все квадратные скобки, которые нужно удалить. Для этого я нашел это & ​​amp; это.

Используя команду sed, как на этих страницах, пространство до и после скобок все еще существует. В моем случае я хочу, чтобы текст внутри, пробел перед & amp; после, и сами скобки для удаления.

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

Чтобы удалить [first]  & amp;  [last], как я могу это сделать с помощью команды sed?

6
задан 23 October 2017 в 12:13

6 ответов

sed - неправильный инструмент. Он не переименовывает файлы. Хотя вы можете связать его с чем-то, что может, проще использовать rename из Perl:

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

С помощью -n, rename покажет, какие изменения будут сделаны. Запустите без -n, чтобы фактически переименовать файлы. rename - Perl, а в Perl .*? не является жадным совпадением, например .*, поэтому вам не нужно использовать трюки, такие как [^]]*.

Чтобы удалить окружающие пробелы :

rename -n 's/\s*\[.*?\]\s*//g' *
7
ответ дан 22 May 2018 в 17:15
  • 1
    Ах, ты прав. Вот почему я получил ошибку. Он пытается изменить сам файл, а не изменять его имя. Я никогда раньше не использовал sed или rename, так как для меня достаточно mv. Ваш ответ - это то, что я искал. Он отлично работает! Большое спасибо. – Hidayats 23 October 2017 в 13:22

sed - неправильный инструмент. Он не переименовывает файлы. Хотя вы можете связать его с чем-то, что может, проще использовать rename из Perl:

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

С помощью -n, rename покажет, какие изменения будут сделаны. Запустите без -n, чтобы фактически переименовать файлы. rename - Perl, а в Perl .*? не является жадным совпадением, например .*, поэтому вам не нужно использовать трюки, такие как [^]]*.

Чтобы удалить окружающие пробелы :

rename -n 's/\s*\[.*?\]\s*//g' *
7
ответ дан 18 July 2018 в 04:46

sed - неправильный инструмент. Он не переименовывает файлы. Хотя вы можете связать его с чем-то, что может, проще использовать rename из Perl:

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

С помощью -n, rename покажет, какие изменения будут сделаны. Запустите без -n, чтобы фактически переименовать файлы. rename - Perl, а в Perl .*? не является жадным совпадением, например .*, поэтому вам не нужно использовать трюки, такие как [^]]*.

Чтобы удалить окружающие пробелы :

rename -n 's/\s*\[.*?\]\s*//g' *
7
ответ дан 24 July 2018 в 18:09

Вы не должны использовать 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/new заменить old на new \[ literal [ [^[]+ некоторые символы, которые не являются [ (stuff) save [ f13] для последующего использования в качестве $1, $2 и т. д.

Это работает только в том случае, если ваши имена совпадают. Ответ муру гораздо более портативен.

9
ответ дан 22 May 2018 в 17:15
  • 1
    Оно работает! Спасибо. У меня есть много скобок, которые я не понимаю. Может быть, вы можете дать мне ссылку на это, чтобы читать? – Hidayats 23 October 2017 в 13:34
  • 2
    Некоторые из скобок являются буквальными, а некоторые используются для классов символов (здесь только для отрицания с ^). Я немного объяснил в своих заметках. Вот небольшое резюме регулярного выражения Perl, которое связано с более крупным. Но регулярное выражение, которое я использую здесь, одинаково для sed и grep, поэтому разделы регулярного выражения в info sed, например, могут помочь @SandiHidayat – Zanna 23 October 2017 в 13:47
  • 3
    Хорошо переименовать, любить – Sergiy Kolodyazhnyy 24 October 2017 в 06:22

Вы не должны использовать 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/new заменить old на new \[ literal [ [^[]+ некоторые символы, которые не являются [ (stuff) save stuff для последующего использования в качестве $1, $2 и т. д.

Это работает только в том случае, если ваши имена совпадают. Ответ муру гораздо более портативен.

9
ответ дан 18 July 2018 в 04:46

Вы не должны использовать 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/new заменить old на new \[ literal [ [^[]+ некоторые символы, которые не являются [ (stuff) save stuff для последующего использования в качестве $1, $2 и т. д.

Это работает только в том случае, если ваши имена совпадают. Ответ муру гораздо более портативен.

9
ответ дан 24 July 2018 в 18:09
  • 1
    Оно работает! Спасибо. У меня есть много скобок, которые я не понимаю. Может быть, вы можете дать мне ссылку на это, чтобы читать? – Hidayats 23 October 2017 в 13:34
  • 2
    Некоторые из скобок являются буквальными, а некоторые используются для классов символов (здесь только для отрицания с ^). Я немного объяснил в своих заметках. Вот небольшое резюме регулярного выражения Perl, которое связано с более крупным. Но регулярное выражение, которое я использую здесь, одинаково для sed и grep, поэтому разделы регулярного выражения в info sed, например, могут помочь @SandiHidayat – Zanna 23 October 2017 в 13:47
  • 3
    Хорошо переименовать, любить – Sergiy Kolodyazhnyy 24 October 2017 в 06:22

Другие вопросы по тегам:

Похожие вопросы: