Я не бегло говорю на sed, но легко сделать так в awk:
awk '/bar/{getline;next} 1' foo.txt
awk чтения сценария: для строки, содержащей панель, получите следующую строку (getline), затем пропустите всю последующую обработку (затем). 1 шаблон в конце печатает остающиеся строки.
Как указано в комментарии, вышеупомянутое решение не работало с последовательным bar
. Вот пересмотренное решение, которое принимает его во внимание:
awk '/bar/ {while (/bar/ && getline>0) ; next} 1' foo.txt
Мы теперь продолжаем читать для пропуска всех/bar/строк.
rename 's/(PMC|\.pdf)//g' *pdf.txt
Демонстрация:
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
от shell
подсказка. Это очень полезно, можно поместить некоторый код жемчуга как, я делаю в замене.
Можно удалить -n
(переключатель режимов пробного прогона), когда Ваши тесты становятся valids.
Существуют другие инструменты с тем же именем, которое может или не мочь сделать это, так быть осторожным.
Если Вы выполняете следующую команду (linux
)
$ file $(readlink -f $(type -p rename))
и у Вас есть результат как
.../rename: Perl script, ASCII text executable
затем это, кажется, правильный инструмент =)
В противном случае обычно уже сделать это значением по умолчанию (случай) на Debian
и производная как Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(замена /path/to/rename
к пути Вашего perl's rename
команда.
Наконец, что не менее важно, этот инструмент был первоначально записан Larry Wall, папой Perl.
Существует несколько утилит для переименования файлов, но один из самых легких для использования rename
. В Вашем случае можно, вероятно, сделать:
rename PMC '' *txt
rename .pdf '' *txt
Первый параметр является частью имени файла для замены. Второй параметр является замещающей строкой. Здесь я использую ''
представить пустую строку. Весь после параметров является файлами для переименования, здесь я использовал *txt
ограничить замену текстовыми файлами.
rename
должен уже присутствовать, если Вы запускаете Linux. Если Вы работаете *BSD или OS X, Вам, вероятно, придется установить его сначала.
rename
. Существует один от util-linux
, и один от perl
с другим синтаксисом. Тот, к которому Вы обращаетесь, похож на тот от util-linux
это иногда называют rename.ul
чтобы не быть перепутанным с rename
от perl
, в то время как в некоторых других системах, rename
тот от util-linux и тот от perl
назван prename
.
– Stéphane Chazelas
29.10.2013, 17:36
rename 's/PMC// *.txt
и rename s/\.pdf// *.txt
– William Everett
29.10.2013, 18:05
Помимо переименовать команды можно сделать это непосредственно в ударе (всего один способ многих):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
Отредактированный для показа Pinyaka, как это работает:
hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
21375.txt 21376.txt
Попробуйте это:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
j=${i//\.pdf/}
средства занять место .pdf
в $i
ни с чем. Аналогично со вторым j присвоением, избавляющимся от PMC.
Если Вы используете zsh
, это - типичное задание для zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
(zmv
потенциал дескрипторов конфликтует корректно).
Сначала сделайте резервную копию ваших файлов! Тогда в основном вы можете использовать вкладыш 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
.
.pdf
от имени файла. – William Everett 29.10.2013, 18:39