Parece que você está fazendo sua lição de casa hoje ...
Uma solução:
grep -c "\([',]\|^$\)" filename
Se por linha em branco você também quiser incluir aqueles que contenham apenas espaços:
grep -c "\([',]\|^[[:space:]]*$\)" filename
O truque para apóstrofos é usar aspas duplas, caso contrário ''' será um erro. A construção \( regexp1 \| regexp2 \) corresponderá a todas as linhas que corresponderem a regexp1 ou regexp2 . O regexp [',] corresponde a todas as linhas que contêm uma cotação ' ou uma coma , .
Aqui você precisa escapar os parênteses () e o canal | caso contrário o grep tenta encontrar esses caracteres e não os considera como construções regexp. Se você não gosta de escapar, você pode usar a opção -E (para regexps estendidos) ou egrep diretamente como:
grep -cE "([',]|^$)" filename
ou
egrep -c "([',]|^$)" filename
No seu OP, você menciona a opção -x . Ele funciona para obter linhas vazias ... mas não vai funcionar com o seu coma / exigência de cotação. Então, para corresponder a uma linha em branco, estou usando ^$ ( ^ é uma âncora para o início da linha e $ é uma âncora para o final da linha).
Espero que isso ajude.