2

findstrWindows コマンド ラインから使用して、文字間に連続する 2 つ以上のスペースを検索する方法はありますか?

例:

Hello world!  - nomatch wanted
Hello  world! - match wanted

正規表現構文とは

また、次のコマンド ライン セッションを理解するのを手伝ってもらえますか ( と の違い[ ]。2[ ]*番目のコマンドは何も返しません)。

c:\1>findstr -i -r  "view[ ]*data.sub" "view data sub.acf"
View Data Sub.ACF:            "].DATE_STAMP)>=[Forms]![MainNav]![View Data Sub]"
View Data Sub.ACF:            "].DATE_STAMP)<[Forms]![MainNav]![View Data Sub]"

c:\1>findstr -i -r  "view[ ]data.sub" "view data sub.acf"

c:\1>

PS: 好奇心旺盛です。awk、perl、C#などについては知っていますが、どうfindstrですか?

4

2 に答える 2

4

2 つの連続するスペースを検索する場合は、次のようにします。

findstr /C:"  " input.txt

または、大文字と小文字を区別しない正規表現で:

findstr /R /I /C:"lo  wo" input.txt

重要なビットは/C:、パターンの前にあります。これはfindstr、パターンをリテラル文字列として扱うように指示します。これがないと、findstr はパターンをスペースで複数のパターンに分割します。私の経験では、これは決してあなたが望むものではありません。

アップデート

文字間に 2 つ以上のスペースを入れるには:

findstr /R /I /C:"[a-z]   *[a-z]" input.txt

パターンには 3 つのスペースがあることに注意してください。これは、文字、2 つのスペースの後に 0 個以上のスペース (つまり、2 つ以上のスペース)、および別の文字に一致します。

于 2012-05-07T19:07:36.553 に答える
0

文字間に 2 つ以上の連続するスペースを見つけるには:

C:\Users\harry> findstr /i /r /c:"o  [ ]*w" test.txt
Hello  world!
Hello   world!

翻訳: 「o」、2 つのスペース、0 個以上のスペース、「w」を含む一致行。(角括弧は冗長ですが、わかりやすくします。)おそらく、これfindstr /?で正規表現の構文の概要がわかると思いますか?

質問の 2 番目の部分について: arx が既に指摘したように、期待する結果が得られない理由は、/C フラグを使用していないためです。最初のコマンドを考えてみましょう:

findstr -i -r  "view[ ]*data.sub" "view data sub.acf"

これは、との2 つの正規表現のいずれかに一致する任意の行の検索として解釈されます。私はいくつかの実験を行いましたが、最初の正規表現は不適切な形式として破棄されているか、空の文字セットからの一致が必要であると解釈されていると思います。2 番目の正規表現は次のように解釈されます: 0 個以上の ']'、'data'、1 つの任意の文字、'sub'。たまたま、これはあなたが使用していると思っていた単一の正規表現と同じ行に一致することがあります。アスタリスクを取り除くとそうではありません:view[]*data.sub

findstr -i -r  "view[ ]data.sub" "view data sub.acf"

2 番目の正規表現は次のように解釈されます: 正確に 1 つの ']'、'data'、1 つの任意の文字、'sub'。文字列 ']data' はテキストに含まれていないため、一致する行はありません。代わりに、/c を指定する必要があります。

findstr /i /r /c:"view[ ]data.sub" "view data sub.acf"

ここで、単一の正規表現を検索しています:「ビュー」、スペース、「データ」、任意の文字、「サブ」。これはおそらくあなたがやりたかったことです。

于 2012-05-08T06:08:35.887 に答える