如何将多个值传递给单个grep-v选项



我有一个名为my_data.txt的文本文件,其中包含以下内容:

#  define var1 and var2
var1=101
var2=202
// display var1 and var2
echo ${var1}
echo ${var2}

我希望搜索var1的所有出现,但不搜索以"#"或"//"开头的行中的出现。我可以做到:

grep var1 my_data.txt | grep -v '^#' | grep -v '^//'

输出:

var1=101
echo ${var1}

结果是正确的。问题是:有没有办法将值"^#"one_answers"^//"都传递给一个-v选项?

我建议:

grep -v -e '^#' -e '^//' file | grep 'var1'

或者使用扩展正则表达式(-E):

grep -v -E '^(#|//)' file | grep 'var1'

输出:

var1=101echo${var1}

如果可以使用grep-p,则可以使用与Perl兼容的正则表达式和单个grep命令。

grep -P "^(?!#|//).*bvar1b" my_data.txt

图案与匹配

  • ^字符串开始
  • (?!#|//)否定前瞻,断言不是#//
  • .*bvar1b匹配行中的单词var1

或者使用awk跳过以#或//开头的行并打印包含var1 的行

awk '/^(#|//)/{next};index($0, "var1")' my_data.txt

示例将输出:

var1=101
echo ${var1}

最新更新