Ваше выражение эквивалентно:
output.gsub!(/grep .*$/,'')
, который намного легче читать.
. в регулярном выражении соответствует всем символам, кроме новой строки по умолчанию. Таким образом, в предоставленной строке он соответствует "grep / mnt / nand" и заменит для этого пустую строку. Результатом является предоставленная строка без соответствующей подстроки.
Вот более простой пример:
"hello\n\n\nworld".gsub(/hello.*$/,'') => "\n\n\nworld"
И в указанном вами регулярном выражении, и в приведенном выше примере $ не обязателен. Он используется в качестве привязки для соответствия концу строки, но поскольку шаблон непосредственно перед ним (. *) Соответствует всему, вплоть до новой строки, он является избыточным (но не причиняет вреда).