如何从 Windows 文件路径中 grep 出二进制名称

如何从 Windows 文件路径中 grep 出二进制名称

我正在尝试从完全限定的 Windows 路径中提取实际的二进制名称 (*.exe)。因此,我有一个文件,其中的行包含类似于以下内容的字符串:

"c:\windows\system32\rundll32.exe"

如何提取路径的最后一部分,即 exe 名称?

我尝试使用grep -Eo "\\\(.*).exe",但由于路径的前面部分有反斜杠,所以它会一直向上,直到不再看到反斜杠为止。

答案1

您可以贪婪地删除最后一个反斜杠之前的所有内容,并保留其后的内容,直到引号字符:

sed 's/.*\\\(.*\)"/\1/g'

答案2

使用 awk(假设文件中没有其他行):

awk -F'\' '{gsub(/"/, ""); print $NF}' file.txt

awk 将用作\字段分隔符,gsub() 将删除双引号,然后它将打印最后一个字段(文件名)。

如果此文件不仅仅包含 .exe 文件,并且您只想查看 .exe 文件,则可以使用:

awk -F'\' '/exe"$/{gsub(/"/, ""); print $NF}' file.txt

答案3

例如:

echo '"c:\windows\system32\rundll32.exe"' | rev | cut -d'\' -f1 | rev | sed 's,"$,,'

答案4

使用grep

$ echo '"c:\windows\system32\rundll32.exe"' | grep -Eo '[^\\]+\.exe'
rundll32.exe

这会匹配并打印一个或多个字符不是[^\\]+紧接着是一个反斜杠\.exe

相关内容