Ich versuche nach Zeilen zu suchen, die mit "1" beginnen
ls -1 | grep ^1*
Es werden jedoch Zeilen zurückgegeben, die nicht mit 1 beginnen. Was fehlt mir hier?
Ich versuche nach Zeilen zu suchen, die mit "1" beginnen
ls -1 | grep ^1*
Es werden jedoch Zeilen zurückgegeben, die nicht mit 1 beginnen. Was fehlt mir hier?
ls
Ausgabe mit grep begrenzen möchten, treten Probleme auf, wenn Dateinamen seltsame Zeichen enthalten, z. B. Zeilenumbrüche ... Viele andere Befehle (irgendwie nichtls
, zumindest nicht die Version, die ich überprüfen muss) Sie haben die Möglichkeit, eine durch Null getrennte Ausgabe zu erstellen, die Sie dann sicher verarbeiten könnengrep -z
Antworten:
Dein regulärer Ausdruck bedeutet nicht, was du denkst. Es stimmt mit allen Zeilen überein, die mit einem (1) beginnen und null oder mehr (*) Mal wiederholt werden. Alle Zeichenfolgen stimmen mit diesem regulären Ausdruck überein.
grep '^1'
macht was du willst.quelle
Hast du folgendes probiert?
Das heißt, entfernen Sie die
*
, was im Grunde sagtgrep
, null oder mehr Vorkommen des^1
Ausdrucks zu finden. Mit anderen Worten: Passen Sie die Zeilen an, die mit einer 1 beginnen, oder nicht.quelle
Obwohl dies Ihre Frage nicht beantwortet, ist dies eine bessere Lösung für das, was Ihr Ziel zu sein scheint:
Sie können ein Shell-Glob verwenden, um alle Dateien aufzulisten, die mit beginnen
1
. Beachten Sie, dass dies*
beim Shell-Globbing eine andere Bedeutung hat als bei regulären Ausdrücken.quelle
*
steht ein Platzhalter für "0 oder mehr eines beliebigen Zeichens". Die Bedeutung von Regex wird in Otokans Antwort erklärt.^ 1. * entspricht der ganzen Zeile, oder wie oben gesagt, ^ 1 hat die in der Zeile enthaltene Zeichenfolge erhalten.
Verschiedene Stile von Regex verwenden verschiedene Symbole, die Zeichen darstellen. Einige Optionen legen fest, welchen Stil Sie verwenden möchten. und verschiedene Optionen geben an, ob Sie die gesamte Zeile oder nur einen Teil davon oder die gesamte Eingabe als eine Zeichenfolge abgleichen möchten.
quelle