2016-10-15 46 views
3

我在powershell中使用Ack 2.04版本。 我想在文本文件中搜索「jsonClass」:「Page」(包含引號)的文本。如何在PowerShell中確認ACK中的雙引號和冒號

我似乎不能正確引用和轉義。

ack -c --match '"jsonClass":"Page"' 

在PowerShell中不起作用,我猜ack也會選擇單引號。 轉義雙引號會導致無效的正則表達式錯誤。

ack -c --match "\"jsonClass\":\"Page\"" 
    Invalid regex '\': 
    Trailing \ in regex m/\/ at C:\CHOCOL~1\lib\ACK2~1.04\content\ack.pl line 315 

我也嘗試了文字選項,但我認爲ack的解釋冒號作爲文件參數。

ack -c -Q --match "jsonClass":"Page" 
    ack.pl: :Page: No such file or directory 

任何想法我失蹤了?

編輯:我使用PowerShell V2

+0

ack命令/ cmdlet /函數是什麼? – saftargholi

+0

@arashzgh http://beyondgrep.com/ – sas1138

+0

我正在使用powerShell 2.0 – sas1138

回答

4

如果ACK是一個功能是可能發生的-c通過PowerShell的解釋,你能測試:

ack '-c' '--match' '"jsonClass":"Page"' 

-c --match應該被解釋爲--match是參數值c in函數請求

如果是exe文件,請嘗試:

ack -c --match '\"jsonClass\":\"Page\"' 
+0

這似乎不成問題。 – sas1138

+0

我試過了-c,但沒有簡單模式的引號,它返回了預期的結果。 'ack -c -Q --match「Page」' – sas1138

+3

'ack'是一個Perl腳本/模塊。當字符串由Perl處理時,反斜槓是必需的。無論是「'\」jsonClass \「:\」Page \「」或「'」\「」jsonClass \「」:\'「Page \'」「'''都可以。 –

5

要與的PowerShell v3的+解決方案補充JPBlanc's effective answer

調用外部程序ack ,使用所謂的停止解析符號,--%,使得PowerShell的通過原樣傳遞其餘參數,其中例外 nding cmd.exe風格的環境變量引用如%PATH%

ack --% -c --match "\"jsonClass\":\"Page\"" 

讓您專注於目標程序只的轉義規則,而不用擔心使用PowerShell自己的分析和逃避複雜的相互作用。

因此,在PowerShell v3或更高版本中,OP自己的第二個解決方案嘗試通過將--%作爲第一個參數進行工作。

請參閱Get-Help about_Parsing


注意,確切當量的上述命令,而無需使用--%(也工作在PSV2,通常是有幫助的如果你想包括PowerShell的擴展型變量/表達式中的其他參數)是這樣的:

ack -c --match '"\"jsonClass\":\"Page\""' 

也就是說,整個參數爲,是被封閉在s到傳遞單獨的報價,它確保PowerShell不會解釋它。

請注意內部封閉"不存在JPBlanc的答案(撰寫本文時)。他們保證該參數最終被ack看作單個參數,即使它包含空格。

+0

我正在使用PowerShell v2,並且上面的轉義不是解決它,因爲它似乎傳遞給ack的參數還包括回覆引用 – sas1138

+0

@ sas1138:我已經重寫了答案。現在它只對PSv3 +用戶有幫助,但由於您沒有將您的帖子標記爲僅限v2(請保持這種方式),我想我會展示一個PSv3 +替代品,這可能對未來的讀者有所幫助。 (我原來的答案的錯誤是,我試圖修復您的_PowerShell解決方案attempt_而不是解決您的原始問題;請注意,反引號將不會傳遞給'ack',但是,因爲反引號是PS'_own_轉義字符) – mklement0

+0

謝謝,我試圖編輯,但我沒有足夠的權限來編輯帖子 – sas1138