Ven Ven Asked: 2020-07-06 18:45:04 +0800 CST2020-07-06 18:45:04 +0800 CST 2020-07-06 18:45:04 +0800 CST 从 Bash 中的路径中提取文件名 772 我有一个包含很多链接的文件,我需要 bash 脚本来提取所有以.pdfformat 结尾的文件的名称? bash 3 个回答 Voted vraj 2020-07-06T19:48:02+08:002020-07-06T19:48:02+08:00 在这里,cut将用空格分割字符串,f1 表示第一个字段 现在rev将反转字符串并使用“/”拆分字符串cut,-f1其中将给我们 URL 的最后一部分,但是以相反的顺序。所以我们需要再次反转它! cat filename | cut -d' ' -f1 | rev | cut -d'/' -f1 | rev Best Answer steeldriver 2020-07-06T22:18:25+08:002020-07-06T22:18:25+08:00 您可以使用 grep -o '[^/]*\.pdf' example [^/]匹配任何不是的单个字符/ [^/]*\.pdf是一个(可能为空)非/字符序列,后跟字符.pdf(句点前的反斜杠使其成为文字 - 否则.在正则表达式中匹配任何字符) grep-o标志输出每个匹配部分,每行一个匹配 删除重复数据,管道通过sort和uniq,或sort -u grep -o '[^/]*\.pdf' example | sort -u WU-TANG 2020-07-13T00:03:56+08:002020-07-13T00:03:56+08:00 basename /usr/bin/poop.txt 会给你 poop.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 允许多个参数
cut
将用空格分割字符串,f1 表示第一个字段rev
将反转字符串并使用“/”拆分字符串cut
,-f1
其中将给我们 URL 的最后一部分,但是以相反的顺序。所以我们需要再次反转它!您可以使用
[^/]
匹配任何不是的单个字符/
[^/]*\.pdf
是一个(可能为空)非/
字符序列,后跟字符.pdf
(句点前的反斜杠使其成为文字 - 否则.
在正则表达式中匹配任何字符)-o
标志输出每个匹配部分,每行一个匹配删除重复数据,管道通过
sort
和uniq
,或sort -u
basename /usr/bin/poop.txt
会给你
poop.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 允许多个参数