So entfernen Sie den Domänenteil jeder Zeile aus einer Textdatei mit E-Mail-Adressen

So entfernen Sie den Domänenteil jeder Zeile aus einer Textdatei mit E-Mail-Adressen

Ich habe eine Textdatei mit einer E-Mail-Adresse pro Zeile. Wie kann ich den Domänenteil, aber nicht den TLD-Teil jeder Zeile entfernen? Hier würden wir TLD als letztes Element der Zeichenfolge nach dem letzten Punktzeichen definieren.

Mit anderen Worten, Beispieleingabe:

[email protected]
[email protected]
[email protected]
[email protected]

Gewünschte Ausgabe:

foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Antwort1

$ sed 's/@.*[.]/@/' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Der reguläre Ausdruck @.*[.]erfasst alles von @bis zum letzten Punkt .in der Zeile. Das ersetzen wir durch @.

Antwort2

Verwenden vonperl

perl -pe 's/(@).*\.(.*)$/\1\2/' foo

oder inline

perl -i -pe 's/(@).*\.(.*)$/\1\2/' foo

Beispiel

$ cat foo
[email protected]
[email protected]
[email protected]
[email protected]

$ perl -pe 's/(@).*\.(.*)$/\1\2/' foo
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

RegEx-Erklärung

/(@).*\.(.*)$/

  • 1. Erfassungsgruppe ( @)

    @@entspricht wörtlich dem Charakter

  • .*passt zu jedem Zeichen (außer Newline)

    Quantifizierer: *Zwischen null und unbegrenzt oft, so oft wie möglich, Rückgabe nach Bedarf [gierig]

    \..entspricht wörtlich dem Charakter

  • 2. Erfassungsgruppe ( .*)

    .*passt zu jedem Zeichen (außer Newline)

    Quantifizierer: *Zwischen null und unbegrenzt oft, so oft wie möglich, Rückgabe nach Bedarf [gierig]

  • $Position am Ende der Zeichenfolge bestätigen

Visualisierung regulärer Ausdrücke

Debuggex-Demo

Antwort3

So awkgeht's

$awk '{ sub(/\@.*\./,"@"); print }' file


foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Mit subSubstitute (Suchen und Ersetzen) können Sie nach einem Muster suchen und es ersetzen.

verwandte Informationen