example.txt ist unten
Restaurant: McDonalds
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 911
Restaurant: 5 guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 911
Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 911
Ich benutze ein Bash-Skript und lass uns sagen, ich möchte nach einem Restaurant anhand seines Namens aus der obigen Datei suchen. Bitten Sie den Benutzer, den Namen des Restaurants einzugeben, und er sollte die Informationen zu diesem Restaurant ausdrucken (5 Zeilen).
awk '/McDonalds/> /KFC/' example.txt
Ich weiß, dass in der obigen Codezeile die gesamte Zeile gedruckt wird, die mit den Mustern "McDonalds" und "KFC" übereinstimmt, aber nur die erste Zeile aus der Textdatei, aber nicht die restlichen Informationen zu diesem Restaurant. Wie kann ich festlegen, dass alle Informationen (5 Zeilen) nur durch die Benutzereingabe des Restaurantnamens gedruckt werden sollen?
Verwenden von
sed
:Erläuterung
Dies ist eine grundlegende
sed
Funktion, Sie beziehen WISSENS ONE-LINE - Skripte für SEDquelle
Mit dem obigen Befehl werden die aufeinanderfolgenden 4 Zeilen zusammen mit der aktuellen Zeile abgerufen und gedruckt, da sie in eine for-Schleife eingegeben wurden. Das Suchmuster
$2=="KFC"
hilft dabei, eine bestimmte Zeile aus den mehreren Zeilen zu ermitteln.quelle
Eine andere mögliche Lösung:
quelle
{if($1=="KFC")print $0}
kann auf nur verdichtet werden$1 == "KFC"
, da die Standardaktion für eine wahre Bedingung das Drucken des Datensatzes ist.Es ist ausreichend, von der Zeile mit dem gewünschten Namen bis zur letzten Zeile mit dem Wort zu drucken
Phone
(vorausgesetzt natürlich, dass alle Einträge dem gleichen Muster folgen und immer den Abschlussdatensatz habenPhone
).Wenn wir es etwas komplizieren wollten, könnten wir genau 5 Zeilen nach dem Match drucken, wie folgt:
Die
stop
Variable wird nicht gesetzt, esNR<=stop
wird also nichts gedruckt, bis der/McDonalds/{stop=NR+5;}
Teil die Variable tatsächlich setzt, und das wird nur passieren, wenn wir die Übereinstimmung finden.quelle