1 votes

Comment afficher le nombre de lignes vides ou contenant ces caractères ?

Je dois compter le nombre de lignes qui contiennent une virgule, une apostrophe ou qui sont complètement vides.

Je sais que pour compter le nombre de lignes vierges, il faut faire egrep -xc '' filename

Mais je ne suis pas sûr de savoir comment faire tout cela en même temps, pour obtenir également les lignes avec apostrophe et virgule, ainsi que les lignes vierges.

5voto

gniourf_gniourf Points 5285

Il semble que vous fassiez vos devoirs aujourd'hui...

Une solution :

grep -c "\([',]\|^$\)" filename

Si par ligne vide vous souhaitez également inclure ceux qui ne contiennent que des espaces :

grep -c "\([',]\|^[[:space:]]*$\)" filename

L'astuce pour les apostrophes consiste à utiliser des guillemets doubles, sinon ''' sera une erreur. La construction \( regexp1 \| regexp2 \) correspondra à toutes les lignes qui correspondent à l'un ou l'autre des éléments suivants regexp1 o regexp2 . L'expression rationnelle [',] correspond à toutes les lignes qui contiennent un guillemet ' ou un coma , .

Ici, vous devez échapper aux parenthèses () et le tuyau | autrement grep essaie de trouver ces caractères, et ne les considère pas comme des constructions d'expressions rationnelles. Si vous n'aimez pas les échapper, vous pouvez utiliser l'option -E (pour les expressions rationnelles étendues) ou egrep directement comme :

grep -cE "([',]|^$)" filename

または

egrep -c "([',]|^$)" filename

Dans votre OP, vous mentionnez le -x d'aiguillage. Cela fonctionne pour obtenir des lignes vides... mais ne fonctionnera pas avec votre exigence en matière de virgules et de guillemets. Donc, pour faire correspondre une ligne vide, j'utilise ^$ ( ^ est une ancre pour le début de la ligne et $ est une ancre pour la fin de ligne).

J'espère que cela vous aidera.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X