2013-07-03 62 views

回答

2

事實上,你使用這個特定的文本編輯器真的很重要嗎?就我個人而言,我只是用grep來做。類似:

grep -l Mickey filename | xargs grep -L Mouse 

說明:

-l選項的意思是「打印包含了匹配,則不匹配的行的文件名(多個)」。

xargs將這些匹配的文件名傳遞給下一個grep命令。

-L選項的意思是「打印不包含匹配的文件名,而不是匹配的行」。

然後,您可以同時在多個文件上運行此命令 - 可能通過向第一個grep添加-r(「遞歸」)選項。

+0

「你使用這個特定的文本編輯器真的很重要嗎?」嘿嘿... grep很棒,但Sublime Text具有令人着迷的吸引力,尤其對於像regex這樣的新手來說更是如此。我知道我的答案是「是的,這很重要。」 – Smandoli

+1

哈哈......我不是那個意思,就像「這不是一個好的文本編輯器」 - 它更像是說「你實際上不需要文本編輯器來做這件事......」(和實際上,像我一樣使用grep,在命令行中,可以讓您輕鬆搜索多個文件。) –

7

是的,你可以使用正則表達式來做到這一點,利用negative lookahead expression

打開搜索Ctrl-Shift-F

確保您使用正則表達式Alt-R

Mickey(?! Mouse) 

搜索將返回的所有實例「 'Mickey''之後沒有'Mouse'

注意請確保您包括Mouse之前的空間!

+0

Mouse在Mickey之前出現的情況如何?你也需要覆蓋。 –

+0

我也想知道。 – Smandoli

+1

ST2尚未準備就緒,所以我使用了Notepad ++。我可以通過一些調整來完成這項工作:'^(?!。* Mickey。* Mouse)*'(Tom Lord的觀察仍然適用,但我確定一個大OR構造會回答這個問題。) – Smandoli

1

我試過Smandoli提供的正則表達式,但實際上它崩潰了Sublime Text 2

也許它是我添加的Sublime插件之一的問題,我根本不知道。

我想用Sublime來做搜索的原因是我正在處理一個合理的大項目,並且有超過一千個文件。所以我想在項目中搜索包含特定字符串('Mickey')的文件。如有必要編輯文件並添加單詞Mouse。然後,我可以'刷新'搜索,現在可以省略我剛剛編輯的文件,因爲它不再符合搜索條件。它是一個合理的工作流程。

Note: The strings are not actually Mickey and Mouse, I just used those to illustrate 
the problem. I don't work for Disney :) 

因爲Smandoli提供的regex墜毀Sublime我也試圖通過Tom Lord提供的grep命令(我上Windows 7運行),但看不到的方式只針對具有特定擴展名的文件(*.asp

最後,我寫了一個小Powershell腳本,似乎這樣的伎倆:

Get-ChildItem -recurse | Where-Object {$_.FullName -like "*.asp"} 
    ForEach-Object { if(($(Get-Content $_) | 
          select-string -pattern "Mickey")) 
        { $_.PsPath }} | Get-ChildItem | 
    ForEach-Object { if(!($(Get-Content $_) | 
          select-string -pattern "Mouse")) 
        { $_.PsPath }} 
+0

I剛在Sublime遇到這個問題,我正在尋找替代品。有什麼建議麼?我寧願留在崇高,否則我願意移動到命令行。我即將嘗試grep。 –