我需要从完整路径(DOS 语法)中提取文件名和包含目录。我需要使用 sed 来执行此操作,因为它是较大正则表达式的一部分。
示例输入:..\home\test\somedir\anotherdir\myfile.txt
预期输出:anotherdir\myfile.txt
任何帮助将不胜感激。
谢谢
答案1
只需按部就班地去做。您需要将一行分成三部分:任意前缀.*
,然后是两个反斜杠,后面跟着非反斜杠字符\\[^\\]*
。捕获倒数第二个反斜杠后面的内容并删除其余部分。
printf %s "$dos_path" | sed 's/^.*\\\([^\\]*\\[^\\]*\)$/\1/'
(请注意echo
,有些 shell 会扩展反斜杠。)
答案2
有什么特殊原因不可以使用 awk 吗?
echo $DIR | awk -F'\' '{ print $(NF-1) "\\" $NF }'