我想找到不包含"path": "/"
和"User-Agent": "curl
的行。应包含仅包含其中一行的行。
换句话说,只有在符合多个模式时才能排除一行?
答案 0 :(得分:3)
使用awk
更好地完成同一行中的这些双重检查:
awk '! (/"path": "\/"/ && /"User-Agent": "curl/)' file
这使用逻辑awk '! (condition1 && condition2)'
,因此只要找到两个字符串就会失败。
$ cat a
"path": "/" and "User-Agent": "curl
"path": "/" hello
bye "User-Agent": "curl
this is a test
$ awk '! (/"path": "\/"/ && /"User-Agent": "curl/)' a
"path": "/" hello
bye "User-Agent": "curl
this is a test
答案 1 :(得分:0)
你可以使用|在grep命令中发出“或”信号,你可以使用-v参数来
这样:
grep -v \"path\"\:\ \"/\"\\\|curl
会打印不包含“path”的每一行:“/”或curl。
答案 2 :(得分:0)
这个awk应该做的工作:
awk '(/"path": "\/"/ && !/"User-Agent": "curl/) ||
(!/"path": "\/"/ && /"User-Agent": "curl/)
{print FILENAME ":" $0}' *
采用这种方法:
awk '(/match1/ && !/match2/) || (!/match1/ && /match2/)' *
所以换句话说,如果两个单词中的任何一个匹配,则打印,但是当两个单词匹配时不打印。