GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie entferne ich ein Wortpräfix mit grep?

Wie die anderen angemerkt haben, grep ist für diese Aufgabe nicht gut geeignet, sed ist eine gute Option, oder wenn der Text gut geordnet ist, ein einfaches cut könnte einfacher zu tippen sein:

echo www.abc.com | cut -d. -f2-
  • -d. sagt cut um . zu verwenden als Trennzeichen.
  • -f2- sagt cut um Feld 2 auf unendlich zurückzusetzen.

mit --only-matching von grep und \K

Sie können dies mit --only-matching eines grep tun Flagge:

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

was abgekürzt werden kann zu

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

Beide Befehle erzeugen

abc.com

mit grep (GNU grep) 3.3.

Statt echo , verwende ich einen Here-String, um den Befehl weiter zu verkürzen:

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

\K setzt den Startpunkt der Übereinstimmung zurück und vergisst im Wesentlichen das übereinstimmende "www.". Weitere Informationen finden Sie unter \K .

mit dem positiven Lookbehind von grep

Sie können dies auch mit einem positiven Lookbehind tun:

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

mit awks Feldtrennzeichen -F

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

Dies wird gedruckt

abc.com

Die $2{print $2} part druckt das zweite Feld, wenn es definiert ist. Dies ist bei mehrzeiliger Eingabe notwendig, um zu vermeiden, dass Leerzeilen für Eingabezeilen ausgegeben werden, die das Feldtrennzeichen nicht enthalten.


Sie bearbeiten keine Zeichenfolgen mit grep in der Unix-Shell grep wird normalerweise verwendet, um einige Zeilen aus dem Text zu finden oder zu entfernen. Verwenden Sie lieber sed stattdessen:

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

Sie müssen reguläre Ausdrücke lernen, um sie effektiv zu verwenden.

Sed kann die Datei auch direkt bearbeiten (die Datei ändern), wenn Sie -i übergeben Argument, aber seien Sie vorsichtig, Sie können leicht Daten verlieren, wenn Sie sed falsch schreiben Befehl und verwenden Sie -i Flagge.

Ein Beispiel

Aus Ihren Kommentaren geht hervor, dass Sie ein TeX-Dokument haben und den ersten Teil aller .com-Domänennamen entfernen möchten. Wenn es Ihr Dokument ist test.tex :

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

dann können Sie es mit diesem sed umwandeln Befehl (Ausgabe in Datei umleiten oder direkt mit -i bearbeiten ):

$ 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}

Bitte beachten Sie Folgendes:

  • Eine übliche Folge zulässiger Symbole gefolgt von einem Punkt entspricht [a-z0-9-]\+\.
  • Ich habe Gruppen im regulären Ausdruck verwendet (Teile davon in \( und \) ), um den ersten und den zweiten Teil der URL anzugeben, und ich ersetze die gesamte Übereinstimmung durch die zweite Gruppe (\2 im Substitutionsmuster)
  • Die Domain sollte mindestens eine .com-Domain der 3. Ebene sein (jede \+ Wiederholung bedeutet mindestens eine Übereinstimmung)
  • Bei der Suche wird die Groß-/Kleinschreibung nicht beachtet (i Flagge am Ende)
  • Es kann mehr als nur Übereinstimmungen pro Zeile (g Flagge am Ende)

Sie können dies mit grep tun ganz einfach:

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

Statt echo Sie müssen Ihre Datei angeben.

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

Ich habe hier den regulären Ausdruck '[^.]*.com' verwendet. Das heißt:finde mir ein Wort ohne . darin ([^.]* ), danach folgt .com (\.com im Bezug). Der -o Schlüssel sagt, dass grep muss nur den Teil anzeigen, der gefunden wurde.


Linux
  1. So entfernen Sie Benutzer in Linux über die Befehlszeile

  2. Wie hebt man ein Wort in der Ausgabe von „Katze“ hervor?

  3. So finden Sie bestimmten Text mit GREP unter Linux

  4. So entfernen Sie Dateien, die älter als N Tage sind, mit tmpreaper in Linux

  5. Verwenden von grep vs. awk

So entfernen Sie Verzeichnisse und Dateien unter Linux

So entfernen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile

So führen Sie eine Mustersuche in Dateien mit Grep durch

15 Beispiele für die Verwendung des Grep-Befehls in Linux

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So entfernen Sie eine E-Mail-Weiterleitung mit cPanel