2012-05-03 67 views
2

這是從文件的一個示例行:如何篩選的.exe從文本文件的文件

O4 - HKLM .. \運行:[TkBellExe] C:\ Program Files文件\共同文件 \房地產\ Update_OB \ realsched.exe(RealNetworks公司)

我只需要realsched.exe

egrep '^O4' file.txt | egrep '[[:alnum:]]{0,99}\.exe' 

模糊,但最接近這樣可行。 (忽略第一個grep,使用它來查找4行) 但是,當exe文件包含_等字符時,則不起作用。

回答

1
$ LINE='O4 - HKLM..\Run: [TkBellExe] C:\Program Files\Common Files\Real\Update_OB\realsched.exe (RealNetworks, Inc.)' 
$ echo "$LINE" | egrep -o '[^\\]+\.exe' 
realsched.exe 
+0

完美!將在8分鐘內投票。你能解釋一下這個語法嗎,我是新手。 – Kedar

+0

@kedar它匹配任何數量的不是斜線後跟'.exe'的字符,因爲它不能匹配斜線,整個路徑被留下。 egrep的'-o'參數使得它只輸出它匹配的內容。 – KurzedMetal

+0

輝煌。再次感謝。 – Kedar

0

您可以簡單地爲您的字符集添加下劃線。例如,'[[:alnum:] _] {0,99} .exe'。您需要包含所有可接受的字符作爲文件名(http://en.wikipedia.org/wiki/Filename)。

+0

也可以。但是名單很長(有效字符)。 這項工作可以避免嗎? egrep -o'[^ \\\?\ \ \ \:\ * \%\/\> \ <] * \。exe'file.txt 另外,如何避免'.exe'點之前沒有任何東西。 – Kedar

+0

@kedar在我的例子中,可以使用'+'運算符而不是'*'來避免匹配'.exe'字符串。並嘗試匹配有效的文件名字符將是矯枉過正,但它是做到這一點的最佳方式。 – KurzedMetal

+0

@KurzedMetal這似乎工作。但是,我在輸出中得到* .exe。但該文件存在錯誤,因爲它包含* .exe。爲了避免兩者,我試着「egrep -o'[^ \\\ *] + \。exe'file.txt」 工作正常。 – Kedar