![](/img/trans.png)
[英]Bash shell(grep) equivalent of this python regular expression?
[英]How do spaces work in a regular expression with grep in the bash shell?
我將閱讀以下正則表達式的方式:
但是此測試失敗:
$ 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.