我有一个名为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}