Как добавить тексты между полями в выводе команды cut?

Команда perl-renameпросто использует регулярное выражение. Поскольку это Perl, он использует очень мощный Perl-совместимый язык регулярных выражений (PCREs ). Поэтому, если вы хотите узнать, как его использовать, просто найдите PCRE.

В этом случае похоже, что вы хотите удалить все пробелы из имен файлов, а также удалить строку -extra. Вы можете использовать две операции, просто разделите их;:

$ rename -n 's/ //g; s/-extra//' *.log
filename - y01m01 - extra.log -> filename-y01m01.log
filename - y01m02 - extra.log -> filename-y01m02.log
filename - y01m03 - extra.log -> filename-y01m03.log
filename - y05m12 - extra.log -> filename-y05m12.log

s/ //gозначает "заменить все пробелы ничем" (поэтому удалите все пробелы ). По умолчанию используемый здесь оператор замены(s/old/new/options)заменяет только первое совпадение. Чтобы он заменял все совпадения, вам нужна «глобальная» опция (g). Вот почему в s/ //gесть g.

s/-extra//просто означает «заменить первое совпадение для -extraничем».

Если это делает то, что вы хотите, запустите его снова, но без -n. Это заставляет renameпросто распечатать то, что он будет делать, не делая этого на самом деле. Очень полезно для тестирования!

Если -extraне является статической строкой, но может изменяться. Вместо этого вы можете удалить все после последнего -и до следующего.:

$ rename -n 's/ //g; s/-[^-]*\././' *.log
filename - y01m01 - extra.log -> filename-y01m01.log
filename - y01m02 - extra.log -> filename-y01m02.log
filename - y01m03 - extra.log -> filename-y01m03.log
filename - y05m12 - extra.log -> filename-y05m12.log

Здесь s/ //gудалит все пробелы, как и раньше, а s/-[^-]*\././означает «найти -, а затем самый длинный отрезок из 0 или более не--символов, следующий за ним, который заканчивается .и замените все это только .. Мне нужно экранировать.(\.)с левой стороны, потому что .означает «любой символ», когда он не экранирован. Это не проблема с правой стороны. сторона.

0
29.09.2021, 09:37
0 ответов

Теги

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