完全修飾 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
。