如何用通用正则从字符串中提取Linux绝对文件路径?
提取Linux命令行中的通用绝对文件路径
问题背景
之前用两个针对性的grep正则提取绝对路径:
grep -o '/media/ismail/.*' grep -o 'file:\S*'
但这类写法依赖/media/ismail/这类固定前缀,没法通用匹配所有Linux绝对路径,需要一个能适配各种场景的正则表达式。
示例输入
evince /media/ismail/SSDWorking/book-collection/_Books/kids/Coping Skills.pdf /usr/lib/libreoffice/program/soffice.bin --impress file:///home/ismail/Desktop/LibreOffice%20Impress.odp --splash-pipe=5 /usr/bin/gjs /usr/bin/com.github.johnfactotum.Foliate /media/ismail/SSDWorking/book-collection/_Books/kids/Coping Skills.epub mpv /media/ismail/8TBRaid0/_IslamNaseed/_JunaidJamshed/Mera Dil Badal De.mp3
通用解决方案
用支持扩展正则的grep命令,同时兼容带空格的路径和file://前缀:
grep -Eo '(file:///)?/[^[:space:]]*(\s[^[:space:]]*)*'
正则说明
(file:///)?:匹配可选的file:///协议前缀/:锚定Linux绝对路径的起始斜杠[^[:space:]]*:匹配连续的非空格字符(\s[^[:space:]]*)*:匹配路径中出现的空格+非空格字符组合,兼容带空格的文件名
执行结果
/media/ismail/SSDWorking/book-collection/_Books/kids/Coping Skills.pdf file:///home/ismail/Desktop/LibreOffice%20Impress.odp /media/ismail/SSDWorking/book-collection/_Books/kids/Coping Skills.epub /media/ismail/8TBRaid0/_IslamNaseed/_JunaidJamshed/Mera Dil Badal De.mp3
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

