我有这个内容的文件:
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 commad:
grep -rE ([^#.*]|^[^0-9aA-zZ]/nfs/location/ .
但带#的行也会出现
答案 0 :(得分:0)
尝试
grep -e "path\s?=\s?\/nfs\/location\/" test.txt
哪里\ s?表示允许任何空格字符中的零个或一个。
<强> EDITED 强> 对不起,我没理解你的问题。 那么这是一个可能的解决方案:
grep -e "=\?\s\?\/nfs\/location\/"
答案 1 :(得分:0)
目前还不完全清楚您要匹配的是什么,但如果您只想匹配/nfs/location/
前面有空格(\s
),等号(=
),或者线锚(^
)的开头,您可以使用\s|=|^
上的positive look-behind assertion,如下所示:
$ grep -P '(?<=\s|=|^)/nfs/location' file
path=/nfs/location/alex
path = /nfs/location/
/nfs/location/
(注意,-P
标志在grep
中启用PCRE支持。)
修改(在评论澄清之后):要声明不在固定路径前[a-zA-Z0-9]
范围内的字符,您可以使用negative look-behind assertion,如下所示:
$ grep -P '(?<![a-zA-Z0-9])/nfs/location' file
path=/nfs/location/alex
path = /nfs/location/
/nfs/location/
答案 2 :(得分:0)
您希望选择带/nfs/location
的行,并附加要求:
它应该在行的开头,或者非alnum字符必须在它前面。您可以在表达式中使用OR:
echo "path=/nfs/location/alex
path = /nfs/location/
alex/nfs/location
/nfs/location/" |
grep -E "(^|[^0-9a-zA-Z])/nfs/location"