Сначала сделайте резервную копию ваших файлов! Тогда в основном вы можете использовать вкладыш python one -в текущем каталоге с общей формой:
python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"
в вашем конкретном случае вы можете использовать это дважды:
python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"
удалить .pdf
и снова:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
, чтобы удалить PMC
.
Вы, должно быть, думали об операторе регулярного выражения \d
в perl
для сопоставления десятичных цифр. Но обратите внимание, что немногие grep
реализации поддерживают его. Стандартный эквивалент: [[:digit:]]
.
Некоторые grep
реализации поддерживают \d
, если передана -P
опция (для использования Perl -как регулярные выражения вместо базовых регулярных выражений ).
Так и с теми,ты мог бы сделать:
grep -Pv '\d\d:\d\d:\d\d' < file.txt
Для возврата строк, не содержащих строку, соответствующую этому шаблону.
(обратите внимание, что это обратная косая черта , а не прямая косая черта)
или:
grep -Pv '(\s+\d\d:\d\d:\d\d){5}\s*$' < file.txt
для строк, которые не заканчиваются 5 такими метками времени.
Чтобы вернуть первое поле в этом случае, вы могли бы вместо этого сделать (с реализациями grep
, которые также поддерживают-o
)
grep -Po '^(?!.*(\s+\d\d:\d\d:\d\d){5}\s*$)\s*\K\S+' < file.txt
На этот раз с использованием отрицательного -просмотра -оператора perl regexp вместо использования grep
's -v
.
grep
в macOS (, которую вы используете, теперь я удалил тег linux из вашего вопроса и заменил его на macos ). быть одним из тех немногих, чьи базовые регулярные выражения поддерживают \d
, но не поддерживают -P
, поэтому операторы (?!...)
и \K
там недоступны.
Стандартным (и более разборчивым )эквивалентом будет:
awk '!/([[:digit:]]{2}:){2}[[:digit:]]{2}/ {print $1}' < file.txt
awk
использует расширенные регулярные выражения , что является еще одним диалектом. Остерегайтесь, что некоторые реализации, в том числе mawk
, по-прежнему не поддерживают ни оператор интервала {2}
, ни классы символов.
В mawk
вы бы сделали:
awk '!/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ {print $1}' < file.txt
Это также должно работать с другими awk
реализациями, но имейте в виду, что для некоторых [0-9]
могут совпадать символы, отличные от 0123456789 (не -ASCII-символы, поэтому, вероятно, это не будет проблемой при вводе ).
Или еще раз, чтобы все 5 последних полей соответствовали шаблону:
awk '
{
for (i = 0; i < 5; i++)
if (!($(NF-i) ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/)) {
print $1
next
}
}' < file.txt