从 Bash 中的路径中提取文件名

从 Bash 中的路径中提取文件名

我有一个包含很多链接的文件,我需要 bash 脚本来提取所有以.pdf格式结尾的文件的名称?

答案1

您可以使用以下方式提取名称

grep -o '[^/]*\.pdf' example
  • [^/]匹配任何非/
  • [^/]*\.pdf是一个(可能为空的)非字符序列/,后跟字符.pdf(句点前的反斜杠使其成为文字 - 否则.在正则表达式中匹配任何字符)
  • grep-o标志输出每个匹配的部分,每行一个匹配

要删除重复项,请通过sortuniqsort -u

grep -o '[^/]*\.pdf' example | sort -u

答案2

  • 这里cut将用空格分割字符串,f1 表示第一个字段
  • 现在rev将反转字符串,并使用 '/' 分割字符串,这cut将为-f1我们提供 URL 的最后一部分,但顺序相反。所以我们需要再次反转它!
cat filename | cut -d' ' -f1 | rev | cut -d'/' -f1 | rev

答案3

basename /usr/bin/poop.txt
会给你
便便.txt

我从 /usr/bin 生成了一个 testy.txt 文件,其中包含其所有路径/文件,并编辑了一些名称以 .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 在 grepping pdf 后仅提取文件中的名称。

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

aconnect.pdf
xargs.pdf
znew.pdf

-a 允许多个参数

相关内容