GNU/Linux >> Tutoriels Linux >  >> Linux

Lignes Grep commençant par 1, mais pas 10, 11, 100, etc.

La question dans le corps

Sélectionnez les lignes qui commencent par un 1 et sont suivis d'un espace

grep -c '^1\s'          file
grep -c '^1[[:space:]]' file

Cela donnera également le nombre de lignes (sans avoir besoin d'appeler wc)

La question dans le titre

Un 1 pas suivi d'un autre chiffre (ou rien) :

grep -cE '^1([^0-9]|$)' file 

Mais les deux solutions ci-dessus ont des problèmes intéressants, continuez à lire.

Dans le corps de la question, l'utilisateur affirme que le fichier est "délimité par des tabulations".

Séparateur

onglet

Une ligne commençant par un 1 suivi d'un onglet (un onglet réel dans la commande). Cela échoue si le délimiteur est un espace (ou tout autre, ou aucun) :

grep '^1    ' file

espace

Une ligne commençant par un 1 suivi d'un espace (un espace réel dans la commande). Cela échoue si le délimiteur est autre ou aucun. :

grep '^1 ' file

tabulation ou espace

grep '^1(   | )' file
grep '^1[[:blank:]]' file

espace blanc

Une option plus flexible consiste à inclure plusieurs espaces (horizontaux et verticaux). Le [:space:] le jeu de classes de caractères est composé de (espace), \t (tabulation horizontale), \r (retour chariot),\n (nouvelle ligne), \v (onglet vertical) et \f (saut de page). Mais grep ne peut pas correspondre à une nouvelle ligne (c'est une limitation interne qui ne peut être évitée qu'avec le -z option). Il est possible de l'utiliser comme description sur le délimiteur. Il est également possible, et plus court, d'utiliser le raccourci GNU disponible de \s :

grep -c '^1[[:space:]]` file
grep -c '^1\s'          file

Mais cette option échouera si le délimiteur est quelque chose comme deux-points : ou tout autre caractère de ponctuation (ou n'importe quelle lettre).

Limite

Ou, nous pouvons utiliser la transition d'un chiffre à une limite "pas un chiffre", eh bien, en fait "un caractère qui n'est pas dans [_[:alnum:]] (_a-zA-Z0-9 )":

grep -c  '^1\b' file       # portable but not POSIX.
grep -c  '^1\>' file       # portable but not POSIX.
grep -wc '^1'   file       # portable but not POSIX.
grep -c  '^1\W' file       # portable but not POSIX (not match only a `1`) (not underscore in BSD).

Cela acceptera comme valides les lignes commençant par un 1 et suivies d'un caractère de ponctuation.


On dirait que vous voulez juste ceci :

$ grep '^1\b' a
1        TGCAG.....
1        TGCAG......

Pour la partie comptage de ceci :

$ grep -c '^1\b' file
2

Avec awk :

awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile

Linux
  1. Comparer les répertoires mais pas le contenu des fichiers ?

  2. Comment Greper les lignes qui ne commencent pas par "#" ou ";" ?

  3. Supprimer les lignes vides dans un fichier texte via grep

  4. Core dumpé, mais le fichier core n'est pas dans le répertoire courant ?

  5. Exécutez le script avec rc.local :le script fonctionne, mais pas au démarrage

Le didacticiel de la commande Grep avec des exemples pour les débutants

Manipuler du texte avec sed et grep

Comment générer un fichier et ignorer les lignes commençant par "?" ?

Comment compter le nombre de lignes dans un fichier après une correspondance Grep ?

/etc/passwd affiche l'utilisateur dans un groupe, mais /etc/group ne le fait pas

Trier avec séparateur de champs