2016-10-15 6 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がファイルparamsとしてコロンを解釈していると思います。

何が不足していますか? --matchがあるよう

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

-c --matchが解釈されるべきである:

EDIT:ACKが関数は-cは、PowerShellのによって解釈されるかをテストできるということが起こる可能性がある場合、私はPowerShellのv2の

+0

ackコマンド/コマンドレット/関数とは何ですか? – saftargholi

+0

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

+0

私はpowerShell 2.0を使用しています – sas1138

答えて

4

を使用していますパラメタの値cが機能している質問

exe try:

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

これは問題ではないようです。 – sas1138

+0

シンプルなパターンを引用符で囲まずに-cを試したところ、期待通りの結果が返ってきました。 'ack -c -Q --match"ページ " – sas1138

+3

' ack'はPerlスクリプト/モジュールです。バックスラッシュは、文字列がPerlで処理されるときに必要です。 '' \ "jsonClass \":\ "Page \" 'または '' \ '" jsonClass \ '":\ '" Page \ '" "' 'は動作します。 –

5

PowerShellのV3 +溶液でJPBlanc's effective answerを補完する:

は、ack などの外部プログラムを呼び出し、いわゆる停止解析シンボルの使用、--%は、PowerShellのせる残りの引数をのままでに、の例外のexpaこのよう%PATH%としてcmd.exeスタイルの環境変数の参照をnding:

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

このを使用すると、PowerShellの独自の解析およびエスケープとの複雑な相互作用を心配することなく、ターゲットプログラムのみのエスケープルールに集中することができます。

したがって、PowerShellのV3以上で、OP自身の第二ソリューションの試みは、最初のパラメータとして--%を渡すことで、働いているだろう。

Get-Help about_Parsingを参照してください。


--%を使用せずに上記のコマンドの正確な同等のもの(もPSV2で動作し、あなたが他の引数でPowerShellの展開変数/式を含めたい場合は、一般的に有用であること)次のようになります。

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

全体の引数は秒で囲まれているとして、渡されますの引用符はで、PowerShellはそれを解釈しません。

JPBlancの答えには存在しない内側の"に注意してください(この執筆時点で)。彼らは、たとえ空白が含まれていても、引数が最終的に引数によってackと見なされることを保証します。

+0

私はPowerShell v2を使用しています。上記のエスケープ処理はそれを解決していません。なぜなら、ackに渡されたargsはバッククォートも含むからです。 – sas1138

+0

@ sas1138:答えを書き直しました。今はPSv3 +ユーザーにのみ役立ちますが、あなたの投稿をv2専用としてタグ付けしていないので(私はそれを今のままにしておいてください)、私は将来の読者に役立つかもしれないPSv3 +の代替案を提示すると思いました。 (私の元の答えの間違いは、元の問題を解決するのではなく、_PowerShellの解決策を修正しようとしていたことです;バックティックは 'ack'に渡されませんでした。 ) – mklement0

+0

ありがとう、私は編集しようとしましたが、まだ投稿を編集するのに十分な特権がありませんでした – sas1138

関連する問題