
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
, grep
und 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 -o
Flag. 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 -rn
Verwenden Sie erweiterte reguläre Ausdrücke (ähnlich wie oben) mit-r
und 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>/p
Drucken Sie die passenden Zeilen aus<regex>
.
Antwort2
sed
plus awk
sollte reichen!
sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'
WennIhre Datei enthält diese ZeichenfolgenZeile für Zeile awk
das 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
sed
teilt Ihre Eingabezeichenfolge in mehrere Zeichenfolgen auf.awk
stimmt mit allen Zeichenfolgen überein, die mit genau zwei Zahlen enden.