我在 Windows 7 Enterprise SP1 x64 電腦上安裝了 GnuWin。我正在嘗試使用 grep 2.5.3 來匹配包含單字“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^\^^$'
(echo true& echo true2) | grep 'true^^\^$'
(echo true& echo true2) | grep 'true^^^\$'
我還嘗試使用雙引號而不是單引號來嘗試上述每一項,但這也不起作用。有誰知道如何將正規表示式錨定到行尾,以便只有我的範例中的第一行(“true”)匹配?謝謝。
答案1
西格溫:(echo true; echo true2) | grep true$
GnuWin:(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
所以第一個問題是我的 echo 指令包含一個無關的空格字元。第二個問題是grep
將其\n
視為行尾,這在以下問題的答案中進行了解釋:為什麼行尾 $ 錨點不能與 grep 指令一起使用? 所以第二個問題是我需要捕捉\r
正規表示式中的字元。因此,要實現此功能,需要執行以下操作:
(echo true& echo true2) | grep 'true[[:space:]]*$'