Windows 7 Enterprise SP1 x64 マシンに GnuWin をインストールしています。grep 2.5.3 を使用して、「true」という単語を含む行を一致させようとしています。以下は、私の実際の使用例です。
(echo true& echo true2) | grep 'true'
上記は両方の行に一致します。ここで、行末アンカー$
(ドル記号) を使用して 2 行目を除外します。次のバリエーションを試しましたが、いずれの行にも一致しません。
(echo true& echo true2) | grep 'true$'
(echo true& echo true2) | grep 'true\$'
(echo true& echo true2) | grep 'true\\$'
(echo true& echo true2) | grep 'true\\\$'
(echo true& echo true2) | grep 'true\\\\$'
(echo true& echo true2) | grep 'true\\\\\$'
(echo true& echo true2) | grep 'true\\\\\\$'
(echo true& echo true2) | grep 'true^$'
(echo true& echo true2) | grep 'true^^$'
(echo true& echo true2) | grep 'true^^^$'
(echo true& echo true2) | grep 'true^^^^$'
(echo true& echo true2) | grep 'true^^^^^$'
(echo true& echo true2) | grep 'true^^^^^^$'
(echo true& echo true2) | grep 'true$$'
(echo true& echo true2) | grep 'true\^$'
(echo true& echo true2) | grep 'true^\$'
(echo true& echo true2) | grep 'true\\^$'
(echo true& echo true2) | grep 'true\^\$'
(echo true& echo true2) | grep 'true^\\$'
(echo true& echo true2) | grep 'true\^^$'
(echo true& echo true2) | grep 'true^\^$'
(echo true& echo true2) | grep 'true^^\$'
(echo true& echo true2) | grep 'true\\\^$'
(echo true& echo true2) | grep 'true\\^\$'
(echo true& echo true2) | grep 'true\^\\$'
(echo true& echo true2) | grep 'true^\\\$'
(echo true& echo true2) | grep 'true\\^^$'
(echo true& echo true2) | grep 'true\^\^$'
(echo true& echo true2) | grep 'true^\\^$'
(echo true& echo true2) | grep 'true\^^\$'
(echo true& echo true2) | grep 'true^\^\$'
(echo true& echo true2) | grep 'true^^\\$'
(echo true& echo true2) | grep 'true\^^^$'
(echo true& echo true2) | grep 'true^\^^$'
(echo true& echo true2) | grep 'true^^\^$'
(echo true& echo true2) | grep 'true^^^\$'
また、上記の各例を、一重引用符ではなく二重引用符を使用して試してみましたが、これも機能しませんでした。正規表現を行末に固定して、私の例の最初の行 ("true") のみが一致するようにする方法を知っている人はいませんか? よろしくお願いします。
答え1
シグウィン:(echo true; echo true2) | grep true$
GNU Win:(echo true & echo true2) | grep "true $"
cmdでは、(echo true & echo true2)
実際にはtrue \r\ntrue2\r\n
答え2
これは、複数の問題が組み合わさった結果であることが判明しました。 (echo true & echo true2)
(この間違いは、私が本当に知りたかったこととは関係がなかったので、質問から削除しました) Windows マシンでは、実際には次の出力が表示されます。
true \r\n
true2\r\n
最初の問題は、私のエコーコマンドに余分なスペース文字が含まれていたことです。2番目の問題は、行末としてgrep
扱われることです。これは、\n
行末の $ アンカーが grep コマンドで機能しないのはなぜですか? 2 番目の問題は、正規表現で文字をキャプチャする必要があることです\r
。したがって、これを機能させるには、次の操作が必要です。
(echo true& echo true2) | grep 'true[[:space:]]*$'