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.