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 ?
Вы можете извлечь имена с помощью
grep -o '[^/]*\.pdf' example
[^ /]
соответствует любому отдельному символу, который не является /
[^ /] * \. Pdf
- это (возможно, пустая) последовательность не /
символов, за которой следуют символы .pdf
( обратная косая черта перед точкой делает его буквальным - в противном случае .
в регулярном выражении соответствует любому символу) -o
выводит каждую совпадающую часть, по одному совпадению на строку дедупликация, труба через сортировки
и uniq
или сортировки -u
grep -o '[^/]*\.pdf' example | sort -u
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 допускает множественные аргументы
cut
будет разбивать строку пробелом, а f1 означает первое поле rev
будет переворачивать строку и разбивать строку на '/' используя вырезать
с -f1
, что даст нам последнюю часть URL, однако в обратном порядке. Поэтому нам нужно снова изменить его! cat filename | cut -d' ' -f1 | rev | cut -d'/' -f1 | rev