簡體   English   中英

在bash shell中使用grep在正則表達式中如何使用空格?

[英]How do spaces work in a regular expression with grep in the bash shell?

我將閱讀以下正則表達式的方式:

  1. 一個空格字符
  2. 斜線字符
  3. 一個'n'char
  4. 零個或多個空格
  5. 行結束

但是此測試失敗:

$ echo "Some Text \n " | grep " \\n *$"

如果刪除正則表達式中的空格,不會失敗

$ echo "Some Text \n " | grep "\\n *$"
Some Text \n

嘗試這個:

echo "Some Text \n " | grep ' \\n *$'

請注意單引號。 serverfault問題具有有關單引號和雙引號的更多信息。 用單引號將字符串按字面意義處理。

這是一個解釋。 當您這樣做時:

echo "Test\\n" ,您將獲得Test\\n作為輸出,因為echo不會轉換轉義序列(除非您將其發送給-e標志)。

echo "Test\\n" | grep '\\n' echo "Test\\n" | grep '\\n' ,僅匹配n 這是因為\\n是“轉義的n”(它似乎沒有轉換為實際的換行符)。 如果要使其與\\n匹配,則需要執行echo "Test\\n" | grep '\\\\n' echo "Test\\n" | grep '\\\\n'

使用正則表達式時,必須注意使用它們的上下文。 幾個字符由正則表達式引擎經過特殊處理的, 也可以通過該機制,你用它來調用它。

就您而言,您正在使用bash。 根據您引用事物的方式,您可能必須兩次轉義特殊字符。 一次阻止bash解釋特殊字符,再一次獲得您想要的正則表達式行為。

要解決這樣的問題,您首先應該問自己“表達式必須是什么樣?” 然后,您還必須問,我應該如何准備該表達式,以便正則表達式引擎實際獲得該模式?”,這涉及了解引用對表達式的影響。特別是在這種情況下,單引號和雙引號之間的區別(以及其他不太常見的報價機制)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM