[英]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.