grep字符串,包括正斜杠作为单词的一部分

时间:2018-03-19 17:32:58

标签: bash grep

如何将/视为单词和grep完全匹配的一部分?

$ echo "aa/bb/cc dd/ee/ff" | grep -w aa/bb
aa/bb/cc dd/ee/ff
$ 

我希望grep将整个字符串与/完全匹配。 在上面的示例中,我不希望它与aa/bb/cc字符串匹配,但只有在有aa/bb

的情况下才匹配

预期产出:

$ echo "aa/bb/cc dd/ee/ff" | grep <options??> aa/bb
$ <empty>
$ echo "aa/bb dd/ee/ff" | grep <options??> aa/bb
aa/bb dd/ee/ff
$ echo "kk/ll aa/bb dd/ee/ff" | grep <options??> aa/bb
kk/ll aa/bb dd/ee/ff
$ echo "kk/ll dd/ee/ff aa/bb" | grep <options??> aa/bb
kk/ll dd/ee/ff aa/bb    
$ echo "kk/ll dd/ee/ff aa/bb/cc" | grep <options??> aa/bb
$ <empty>
$ echo "kk/ll dd/ee/ff a-aa/bb" | grep <options??> aa/bb
$ <empty>

2 个答案:

答案 0 :(得分:1)

grep 方法:

echo "aa/bb/cc aa/bb dd/ee/ff" | grep -P '(?:^|\s)aa/bb(?=\s|$)'
aa/bb/cc aa/bb dd/ee/ff
echo "aa/bb/cc aa/bb dd/ee/ff" | grep -P '(?:^|\s)aa/bb(?=\s|$)'
<empty>
  • -P - perl regex
  • (?:^|\s)aa/bb(?=\s|$)
    • (?:^|\s) - 具有替换组的未捕获组,以匹配字符串^的开头或空白字符\s
    • aa/bb - 字面匹配aa/bb序列
    • (?=\s|$) - 包含替换组的前瞻性肯定断言,以匹配空白字符\s或字符串$的结尾

答案 1 :(得分:1)

-P perl正则表达式开关一起使用:

$ grep -P '(?<=\w)aa/bb(?![/\w])'

注意:

我使用look around高级正则表达式技术。即使链接是用于perl,它也是一个很好的资源(它不仅仅适用于perl)