GNU/Linux >> Linux Esercitazione >  >> Linux

Come rimuovere il prefisso di una parola usando grep?

Come hanno notato gli altri, grep non è adatto per questo compito, sed è una buona opzione, o se il testo è ben ordinato un semplice cut potrebbe essere più facile da digitare:

echo www.abc.com | cut -d. -f2-
  • -d. dice a cut per usare . come delimitatore.
  • -f2- dice a cut per riportare il campo 2 all'infinito.

con --only-matching di grep e \K

Puoi farlo con un --only-matching di grep bandiera:

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

che può essere abbreviato in

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

Entrambi i comandi producono

abc.com

con grep (GNU grep) 3.3.

Invece di echo , userò una stringa here per abbreviare ulteriormente il comando:

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

\K reimposta il punto di partenza della partita, dimenticando essenzialmente il "www." abbinato. Vedi questo per ulteriori informazioni su \K .

con il lookbehind positivo di grep

Puoi farlo anche con un lookbehind positivo:

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

con il separatore di campo di awk -F

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

Questo stampa

abc.com

Il $2{print $2} part stamperà il secondo campo se è definito. Ciò è necessario in caso di input su più righe per evitare l'output di righe vuote per le righe di input che non contengono il separatore di campo.


Non modifichi le stringhe con grep nella shell Unix, grep viene solitamente utilizzato per trovare o rimuovere alcune righe dal testo. Preferiresti usare sed invece:

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

Dovrai imparare le espressioni regolari per usarle in modo efficace.

Sed può anche modificare il file sul posto (modificare il file), se passi -i argomento, ma fai attenzione, puoi facilmente perdere dati se scrivi sed sbagliato comando e usa -i bandiera.

Un esempio

Dai tuoi commenti supponi di avere un documento TeX e di voler rimuovere la prima parte di tutti i nomi di dominio .com. Se è il tuo documento test.tex :

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

allora puoi trasformarlo con questo sed comando (reindirizza l'output su file o modifica sul posto con -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}

Tieni presente che:

  • Una sequenza comune di simboli consentiti seguiti da un punto corrisponde a [a-z0-9-]\+\.
  • Ho usato i gruppi nell'espressione regolare (parti di essa all'interno di \( e \) ) per indicare la prima e la seconda parte dell'URL, e sostituisco l'intera corrispondenza con il suo secondo gruppo (\2 nel modello di sostituzione)
  • Il dominio deve essere almeno di 3° livello .com (ogni \+ ripetizione significa almeno una corrispondenza)
  • La ricerca non fa distinzione tra maiuscole e minuscole (i flag alla fine)
  • Può fare di più che abbinare per riga (g flag alla fine)

Puoi farlo usando grep facilmente:

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

Invece di echo devi dare il tuo file.

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

Ho usato qui l'espressione regolare '[^.]*.com'. Ciò significa:trovami una parola senza . in esso ([^.]* ), dopo di che va .com (\.com in re). Il -o key dice che grep deve mostrare solo la parte che è stata trovata.


Linux
  1. Come rimuovere l'utente in Linux utilizzando la riga di comando

  2. Come evidenziare una parola nell'output di "cat"??

  3. Debian:come installare o rimuovere i pacchetti DEB usando dpkg

  4. Come eliminare la partizione del disco utilizzando Parted Command

  5. Come faccio a grep in modo ricorsivo?

Come rimuovere directory e file utilizzando Linux

Come rimuovere file e directory utilizzando la riga di comando di Linux

Come eseguire la ricerca del modello nei file utilizzando Grep

15 esempi di utilizzo del comando Grep in Linux

Come rimuovere le righe da un file usando il comando Sed

Come rimuovere un inoltro e-mail utilizzando cPanel