extract the filename from a path in a Bash

I have a file which has a lot of links and I need bash script to extract all the names of the files which end with .pdf format ?

-1
задан 12 July 2020 в 10:06

3 ответа

Вы можете извлечь имена с помощью

grep -o '[^/]*\.pdf' example
  • [^ /] соответствует любому отдельному символу, который не является /
  • [^ /] * \. Pdf - это (возможно, пустая) последовательность не / символов, за которой следуют символы .pdf ( обратная косая черта перед точкой делает его буквальным - в противном случае . в регулярном выражении соответствует любому символу)
  • флаг grep -o выводит каждую совпадающую часть, по одному совпадению на строку

дедупликация, труба через сортировки и uniq или сортировки -u

grep -o '[^/]*\.pdf' example | sort -u
0
ответ дан 30 July 2020 в 22:13

basename /usr/bin/poop.txt
would даст вам
poop.txt

я сгенерировал файл testy.txt из / usr / bin, который содержит все его путь / файлы и отредактировал некоторые имена, заканчивающиеся на .pdf.

, поэтому в основном testy.txt выглядит так:
/ usr / bin / aa-enabled
/usr/bin/aconnect.pdf
/ usr / bin / alsaucm
/usr/bin/xargs.pdf
/ usr / bin / xcursogen
/usr/bin/znew.pdf

Вы можете использовать basename для извлечения только имен в файле после grep pdf.

basename -a $ (grep "\\. pdf" testy.file)

aconnect .pdf
xargs.pdf
znew.pdf

-a допускает множественные аргументы

0
ответ дан 30 July 2020 в 22:13
  • Здесь cut будет разбивать строку пробелом, а f1 означает первое поле
  • . Теперь rev будет переворачивать строку и разбивать строку на '/' используя вырезать с -f1 , что даст нам последнюю часть URL, однако в обратном порядке. Поэтому нам нужно снова изменить его!
cat filename | cut -d' ' -f1 | rev | cut -d'/' -f1 | rev
0
ответ дан 30 July 2020 в 22:13

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

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