GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer un préfixe de mot à l'aide de grep ?

Comme les autres l'ont noté, grep n'est pas bien adapté à cette tâche, sed est une bonne option, ou si le texte est bien ordonné un simple cut pourrait être plus facile à taper :

echo www.abc.com | cut -d. -f2-
  • -d. indique cut utiliser . comme délimiteur.
  • -f2- dit cut pour ramener le champ 2 à l'infini.

avec le --only-matching de grep et \K

Vous pouvez le faire avec le --only-matching d'un grep drapeau :

echo "www.abc.com" | grep --perl-regexp --only-matching 'www.\K.*'

qui peut être raccourci en

echo "www.abc.com" | grep -Po 'www.\K.*'

Les deux commandes produisent

abc.com

avec grep (GNU grep) 3.3.

Au lieu de echo , je vais utiliser une chaîne ici pour raccourcir davantage la commande :

grep -Po 'www.\K.*' <<< "www.abc.com"

\K réinitialise le point de départ du match, oubliant essentiellement le "www." correspondant. Voir ceci pour en savoir plus sur \K .

avec le lookbehind positif de grep

Vous pouvez également le faire avec un lookbehind positif :

grep -Po '(?<=www.).*' <<< "www.abc.com"

avec le séparateur de champs d'awk -F

awk -F 'www.' <<< "www.abc.com" '$2{print $2}'

Ceci imprime

abc.com

Le $2{print $2} part imprimera le deuxième champ s'il est défini. Ceci est nécessaire en cas d'entrée multi-lignes pour éviter de générer des lignes vides pour les lignes d'entrée qui ne contiennent pas de séparateur de champs.


Vous ne modifiez pas les chaînes avec grep dans le shell Unix, grep est généralement utilisé pour rechercher ou supprimer certaines lignes du texte. Vous préférez utiliser sed à la place :

$ echo www.example.com | sed 's/^[^\.]\+\.//'
example.com

Vous devrez apprendre les expressions régulières pour les utiliser efficacement.

Sed peut également éditer le fichier sur place (modifier le fichier), si vous passez -i argument, mais attention, vous pouvez facilement perdre des données si vous écrivez le mauvais sed commandez et utilisez -i drapeau.

Un exemple

D'après vos commentaires, vous avez un document TeX et vous souhaitez supprimer la première partie de tous les noms de domaine .com. S'il s'agit de votre document test.tex :

\documentclass{article}
\begin{document}
www.example.com
example.com www.another.domain.com
\end{document}

alors vous pouvez le transformer avec ce sed commande (rediriger la sortie vers un fichier ou modifier sur place avec -i ):

$ sed 's/\([a-z0-9-]\+\.\)\(\([a-z0-9-]\+\.\)\+com\)/\2/gi' test.tex 
\documentclass{article}
\begin{document}
example.com
example.com another.domain.com
\end{document}

Veuillez noter que :

  • Une séquence courante de symboles autorisés suivis d'un point correspond à [a-z0-9-]\+\.
  • J'ai utilisé des groupes dans l'expression régulière (en partie dans \( et \) ) pour indiquer la première et la deuxième partie de l'URL, et je remplace la correspondance entière par son deuxième groupe (\2 dans le modèle de substitution)
  • Le domaine doit être au moins un domaine .com de 3e niveau (tous les \+ répétition signifie au moins une correspondance)
  • La recherche est insensible à la casse (i drapeau à la fin)
  • Il peut faire plus que correspondre par ligne (g drapeau à la fin)

Vous pouvez le faire en utilisant grep facilement :

$ echo www.google.com | grep -o '[^.]*\.com'
google.com

Au lieu de echo vous devez donner votre dossier.

$ grep -o '[^.]*\.com$' < file

J'ai utilisé ici l'expression régulière '[^.]*.com'. Cela signifie :trouvez-moi un mot sans . dedans ([^.]* ), après quoi va .com (\.com en ré). Le -o la clé dit que grep doit montrer uniquement la partie qui a été trouvée.


Linux
  1. Comment supprimer un utilisateur sous Linux à l'aide de la ligne de commande

  2. Comment mettre en surbrillance un mot dans la sortie de "cat" ? ?

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

  4. Debian :comment installer ou supprimer des packages DEB à l'aide de dpkg

  5. Comment supprimer des fichiers de plus de N jours à l'aide de tmpreaper sous Linux

Comment supprimer des répertoires et des fichiers à l'aide de Linux

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

15 exemples d'utilisation de la commande Grep sous Linux

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer un redirecteur d'e-mails à l'aide de cPanel