Это может сработать:
^#?(\$\w+)\s*=.*[\r\n]+#?\1\s*=.*$
Пояснение:
^ start of line
#? optional comment
(\$\w+) $, followed by variable name, captured into backreference no. 1
\s* optional whitespace
= =
.* any characters except newline
[\r\n]+ one or more newlines (\r thrown in for safety)
#? optional comment
\1 same variable name as in the last line
\s*=.* as above
$ end of line
Это не проверяет, что закомментирована ровно одна из строк (она также будет совпадать, если ни одна, или обе не совпадают) Если это проблема, дайте мне знать.
Я не знаю, можно ли сделать grep для соответствия нескольким строкам в одном регулярном выражении; любой инструмент, который вы используете, должен быть установлен в режим "^/$
match start / end of line" (вместо начала / конца строки).