簡體   English   中英

grep命令與另一個正則表達式不匹配新行的開始

[英]grep command not match start of new line with another regex

我有與此內容相關的文件:

path=/nfs/location/alex 
path = /nfs/location/ 
alex/nfs/location 
/nfs/location/
# /nfs/location/
#alex /nfs/location
alex # d /nfs/location
/nfs/location

我想打印路徑開頭的所有行,並且不包含#

/ NFS /位置/

在我的示例中,僅第3行不匹配

我寫了Unix逗號:

grep -rE ([^#.*]|^[^0-9aA-zZ]/nfs/location/ .

但是也會出現帶有#的行

嘗試

grep -e "path\\s?=\\s?\\/nfs\\/location\\/" test.txt

哪里? 表示允許零或任何空白字符之一。

EDITED對不起,我沒有正確理解你的問題。 那么這是一種可能的解決方案:

grep -e "=\?\s\?\/nfs\/location\/"

尚不完全清楚您要匹配的內容,但是如果您只想匹配/nfs/location/並以空格( \\s ),等號( = )或行錨( ^ )開頭,可以在\\s|=|^上使用正向后斷言 ,例如:

$ grep -P '(?<=\s|=|^)/nfs/location' file
path=/nfs/location/alex 
path = /nfs/location/ 
/nfs/location/

(注意, -P標志啟用grep PCRE支持。)

編輯 (從注釋中澄清后):要斷言固定路徑之前不在[a-zA-Z0-9]范圍內的字符,可以使用負向后斷言 ,如下所示:

$ grep -P '(?<![a-zA-Z0-9])/nfs/location' file
path=/nfs/location/alex 
path = /nfs/location/ 
/nfs/location/

您要選擇帶有/nfs/location的行,並有其他要求:
它應該在行的開頭,或者非數字字符必須在其前面。 您可以在表達式中使用OR:

echo "path=/nfs/location/alex
path = /nfs/location/
alex/nfs/location
/nfs/location/" |
grep -E "(^|[^0-9a-zA-Z])/nfs/location"

暫無
暫無

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

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