Befehle für grep und sed

Befehle für grep und sed

Angenommen, ich habe eine Datei wie diese:

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

Ich möchte nur nach den Zeichenfolgen suchen, deren letzte beiden Zeichen numerisch sind, mit sed, grepund awk.

Antwort1

Befehle für grep und sed

Es sieht so aus, als wäre die ursprüngliche Frage falsch formatiert. Daher lauten die einfachsten grep- und sed-Befehle:

egrep '[0-9]{2}$' /path/to/file

Und

sed -rn '/[0-9]{2}$/p' /path/to/file

Ich werde die Erklärungen unten stehen lassen, die Informationen zu diesen Befehlen enthalten, aber auch mit mehreren Zeichenfolgen in einzelnen Zeilen funktionieren. Sie funktionieren weiterhin, enthalten aber zusätzlichen, möglicherweise irrelevanten Code.


Grep

grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file

Erläuterung

  • [^ ]*Stimmt mit einer beliebigen Anzahl von Zeichen überein, die keine Leerzeichen sind.
  • [0-9]\{2\}Zwei Ziffern zuordnen. (Sie könnten [0-9][0-9]stattdessen verwenden.)
  • ( |$)Die Ziffern sollten das Ende eines „Worts“ darstellen und daher entweder von einem Leerzeichen oder einem Zeilenendezeichen gefolgt werden.

Ich bevorzuge stattdessen die Verwendung von extended grep, da Sie die geschweiften Klammern nicht escapen müssen. Daher

grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file

oder

egrep '[^ ]*[0-9]{2}( |$)' /path/to/file

Die Frage wurde bearbeitet, aber wenn es mehrere Übereinstimmungen in einer Zeile gibt und Sie nur die Übereinstimmungen ausgeben möchten, verwenden Sie das -oFlag. ie

egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file

Sed

</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'

Erläuterung

  • </path/to/file tr ' ' '\n'Geben Sie die Datei ein und ändern Sie alle Leerzeichen in Zeilenumbrüche.
  • sed -rnVerwenden Sie erweiterte reguläre Ausdrücke (ähnlich wie oben) mit -rund drucken Sie nicht die gesamte Ausgabe sofort mit aus -n.
  • [0-9]{2}$Dieser reguläre Ausdruck ähnelt dem oben in der Grep-Zeile. Da wir jedoch bereits alle Leerzeichen entfernt haben, müssen wir weder die Nicht-Leerzeichen am Anfang noch das mögliche Leerzeichen am Ende definieren.
  • /<regex>/pDrucken Sie die passenden Zeilen aus <regex>.

Antwort2

sedplus awksollte reichen!

sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'

WennIhre Datei enthält diese ZeichenfolgenZeile für Zeile awkdas allein sollte reichen!

awk '/[0-9][0-9]$/' file1

WennSie möchten Zeichenfolgen abgleichen, die mit endenGENAU zwei Zahlen undnicht mehr, dann verwenden Sie stattdessen diese Befehle:

sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'

Und

awk '/[^0-9][0-9][0-9]$/' file1

Ausgabe:

adasfddfd09
dsassd90897
sdddsdf56 

Erläuterung

  • sedteilt Ihre Eingabezeichenfolge in mehrere Zeichenfolgen auf.
  • awkstimmt mit allen Zeichenfolgen überein, die mit genau zwei Zahlen enden.

verwandte Informationen