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.

관련 정보