GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouver des lignes contenant une chaîne sous Linux

/tmp/monfichier

first line text
wanted text
other text

la commande

$ grep -n "wanted text" /tmp/myfile | awk -F  ":" '{print $1}'
2

Le -n passer à grep ajoute toute ligne correspondante avec le numéro de ligne (suivi de : ), tandis que la deuxième commande utilise les deux-points comme séparateur de colonnes (-F ":" ) et imprime la première colonne de n'importe quelle ligne. Le résultat final est la liste des numéros de ligne avec une allumette.


Outre grep , vous pouvez également utiliser d'autres utilitaires tels que awk ou sed

Voici quelques exemples. Supposons que vous souhaitiez rechercher une chaîne is dans le fichier nommé GPL .

Votre exemple de fichier

[email protected]:~$ cat -n GPL 
     1    The GNU General Public License is a free, copyleft license for
     2    The licenses for most software and other practical works are designed
     3  the GNU General Public License is intended to guarantee your freedom to
     4  GNU General Public License for most of our software;
[email protected]:~$ 

1. grep

[email protected]:~$ grep is GPL 
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
[email protected]:~$ 

2. ok

[email protected]:~$ awk /is/ GPL 
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
[email protected]:~$ 

3. sed

[email protected]:~$ sed -n '/is/p' GPL
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
[email protected]:~$ 

J'espère que cela vous aidera


La famille de commandes grep (y compris egrep, fgrep) est la solution habituelle pour cela.

$ grep pattern filename

Si vous recherchez le code source, alors ack peut être un meilleur pari. Il recherchera automatiquement les sous-répertoires et évitera les fichiers que vous ne rechercheriez normalement pas (objets, répertoires SCM, etc.)


La manière habituelle de le faire est avec grep , qui utilise un modèle regex pour faire correspondre les lignes :

grep 'pattern' file

Chaque ligne qui correspond au motif sera sortie. Si vous souhaitez rechercher uniquement des chaînes fixes, utilisez grep -F 'pattern' file . fgrep est un raccourci pour grep -F .

Vous pouvez également utiliser sed :

sed -n '/pattern/p' file

Ou awk :

awk '/pattern/' file

Linux
  1. Comment utiliser FIND sous Linux

  2. Comment rechercher un texte spécifique à l'aide de GREP sous Linux

  3. Commande Linux :Comment "trouver" uniquement des fichiers texte ?

  4. Comment trouver des fichiers contenant deux chaînes ensemble sous Linux ?

  5. Comment obtenir des lignes contenant une chaîne dans un fichier ?

Comment trouver une chaîne dans un fichier sous Linux

Comment trouver une adresse IP sous Linux

Comment trouver le nom d'hôte sous Linux

Comment trouver des fichiers contenant une chaîne de texte spécifique sous Linux

Comment trouver la ou les lignes les plus longues dans un fichier sous Linux

Comment utiliser grep sous Linux