Comum grep
não entende \s
ou parênteses. (*) Você quer grep -P
se disponível ou grep -E
/ egrep
e escreve \s
como [ ^I]
(onde ^I
is Tab ; grep
sem -P
não entende \t
também). Além disso, com aspas duplas, alguns shells processarão o \s
e deixarão apenas s
; você deve sempre usar aspas simples com regexes do shell, exceto quando você realmente precisar interpolar uma variável (por exemplo, algo como '^\s*'"$foo"'\s+\('
, alternando entre aspas no parâmetro médio).
As alternativas em seu segundo exemplo (novamente, com -P
e cotação única em vez de dupla) fazem a mesma coisa. O primeiro é tecnicamente melhor porque grep
não vai recuar tanto, mas praticamente não importa.
(*) pedantismo: os parênteses invertidos irão funcionar, novamente exigindo uma única cotação para que o shell não coma as barras invertidas. egrep
geralmente é mais fácil.