정규화된 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
.