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

これは 1 つ以上の文字と一致し、印刷されます。いいえ[^\\]+その後にはバックスラッシュが続きます\.exe

関連情報