Ich möchte das machen:
- Führen Sie einen Befehl aus
- Erfassen Sie die Ausgabe
- Wählen Sie eine Zeile
- Wählen Sie eine Spalte dieser Zeile aus
Nehmen wir als Beispiel an, ich möchte den Befehlsnamen von a erhalten $PID
(bitte beachten Sie, dass dies nur ein Beispiel ist. Ich schlage nicht vor, dass dies der einfachste Weg ist, einen Befehlsnamen von einer Prozess-ID zu erhalten - mein eigentliches Problem ist mit ein anderer Befehl, dessen Ausgabeformat ich nicht steuern kann).
Wenn ich renne, ps
bekomme ich:
PID TTY TIME CMD
11383 pts/1 00:00:00 bash
11771 pts/1 00:00:00 ps
Jetzt mache ich ps | egrep 11383
und bekomme
11383 pts/1 00:00:00 bash
Nächster Schritt : ps | egrep 11383 | cut -d" " -f 4
. Ausgabe ist:
<absolutely nothing/>
Das Problem besteht darin, dass cut
die Ausgabe um einzelne Leerzeichen gekürzt wird und beim ps
Hinzufügen einiger Leerzeichen zwischen der 2. und 3. Spalte cut
eine leere Zeichenfolge ausgewählt wird , um die Ähnlichkeit mit einer Tabelle beizubehalten. Natürlich könnte ich gebrauchencut
das 7. und nicht das 4. Feld auswählen, aber wie kann ich wissen, insbesondere wenn die Ausgabe vorher variabel und unbekannt ist.