Regex stimmt mit dem gesamten Inhalt der Datei in bash überein

9

Wie testen Sie am besten, ob der vollständige Inhalt einer Datei mit einer Regex übereinstimmt, z. B.

? %Vor%

, d. h. nur 9 Zahlen und nichts anderes, keine Zeilenumbrüche und nicht mehrere Zahlensätze.

Hier ist eine Variante, die ich nicht wirklich mag:

%Vor%

Bearbeiten

Ich benutze die akzeptierte Lösung wie folgt:

%Vor%

mit GNU grep.

    
tomsv 05.06.2013, 09:56
quelle

5 Antworten

5

Diese Regex entspricht "bestehend aus 9 Ziffern" und die (?m) bewirkt, dass Caret und Dollar nach / vor Zeilenumbrüchen übereinstimmen, so dass mehrere Zeilen verhindert werden:

%Vor%

Die Umrisse, die die Hauptübereinstimmung umschließen, stellen sicher, dass die übereinstimmende Zeile die einzige -Zeile in der Datei ist - dh dass es genau eine Zeile in der Datei gibt.

Sehen Sie sich im Rubell an, sehen Sie, wie Sie dem 9-stelligen Eingabetext noch weitere Zeichen hinzufügen, sogar einen einzelnen Zeilenumbruch. führt zu einer Nichtübereinstimmung

    
Bohemian 05.06.2013, 10:06
quelle
6
___ answer16940806 ___

Angenommen, Sie möchten keine Zeilenumbrüche in der Datei, überprüfen Sie zunächst die Dateigröße und überprüfen Sie dann den Inhalt:

%Vor%

testen:

%Vor%     
___ qstntxt ___

Wie testen Sie am besten, ob der vollständige Inhalt einer Datei mit einer Regex übereinstimmt, z. B.

? %Vor%

, d. h. nur 9 Zahlen und nichts anderes, keine Zeilenumbrüche und nicht mehrere Zahlensätze.

Hier ist eine Variante, die ich nicht wirklich mag:

%Vor%

Bearbeiten

Ich benutze die akzeptierte Lösung wie folgt:

%Vor%

mit GNU grep.

    
___ answer16937084 ___

Diese Regex entspricht "bestehend aus 9 Ziffern" und die -m bewirkt, dass Caret und Dollar nach / vor Zeilenumbrüchen übereinstimmen, so dass mehrere Zeilen verhindert werden:

%Vor%

Die Umrisse, die die Hauptübereinstimmung umschließen, stellen sicher, dass die übereinstimmende Zeile die einzige -Zeile in der Datei ist - dh dass es genau eine Zeile in der Datei gibt.

Sehen Sie sich im Rubell an, sehen Sie, wie Sie dem 9-stelligen Eingabetext noch weitere Zeichen hinzufügen, sogar einen einzelnen Zeilenumbruch. führt zu einer Nichtübereinstimmung

    
___ tag123regex ___ Reguläre Ausdrücke stellen eine deklarative Sprache zur Verfügung, um Muster in Strings zu vergleichen. Sie werden häufig für die Überprüfung, Analyse und Umwandlung von Zeichenfolgen verwendet. Da reguläre Ausdrücke nicht vollständig standardisiert sind, sollten alle Fragen mit diesem Tag auch ein Tag enthalten, das die anwendbare Programmiersprache oder das entsprechende Werkzeug angibt. HINWEIS: Nach HTML-, JSON-, usw.-Regexen zu fragen, neigt zu negativen Reaktionen. Wenn es einen Parser dafür gibt, verwende stattdessen diesen. ___ qstnhdr ___ Regex stimmt mit dem gesamten Inhalt der Datei in bash überein ___ tag123bash ___ Für Fragen zu Skripten, die für die Bash-Befehlsshell geschrieben wurden. Für Shell-Skripte mit Fehlern, überprüfen Sie diese bitte mit dem Shellcheck-Programm (oder im web-Shellcheck-Server unter https://shellcheck.net), bevor Sie hier posten. Fragen zur interaktiven Verwendung von Bash sind bei Super Usern eher Thema als bei Stack Overflow. ___ answer16943223 ___
%Vor%

Damit wird die Zahl genau dann gedruckt, wenn genau eine Zeile vorhanden ist und sie mit dem Muster übereinstimmt.

Wenn Sie nur den Rückgabewert wie %code% möchten, können Sie dies verwenden:

%Vor%     
___ answer16937186 ​​___

Testen Sie, dass der Zeilenzähler 1 ist, und testen Sie dann, ob die Zeile mit dem regulären Ausdruck übereinstimmt:

%Vor%

Unterbrechen Sie den Befehl, das ist was passiert:

%Vor%

Sie können noch restriktiver sein, indem Sie die Bytes mit wc zählen:

%Vor%

Bei Bedarf würde der nachfolgende Zeilenumbruch abgefangen. ( %code% zählt stattdessen Zeichen, falls Sie Multi-Byte-Zeichen verwenden)

    
___ answer16971534 ___

Sie können pure test oneliner

verwenden %Vor%     
___
brice 05.06.2013 10:11
quelle
1

Angenommen, Sie möchten keine Zeilenumbrüche in der Datei, überprüfen Sie zunächst die Dateigröße und überprüfen Sie dann den Inhalt:

%Vor%

testen:

%Vor%     
glenn jackman 05.06.2013 13:08
quelle
1
%Vor%

Damit wird die Zahl genau dann gedruckt, wenn genau eine Zeile vorhanden ist und sie mit dem Muster übereinstimmt.

Wenn Sie nur den Rückgabewert wie grep -q möchten, können Sie dies verwenden:

%Vor%     
Kevin 05.06.2013 14:58
quelle
1

Sie können pure test oneliner

verwenden %Vor%     
bartimar 06.06.2013 20:25
quelle

Tags und Links