Wie Sie angeben, mehr Räume für das Trennzeichen mit Ausschneiden?
Gibt es eine Möglichkeit, um anzugeben, eine Feld-Trennzeichen für mehrere Räume mit dem cut-Befehl? (wie " "+) ?
Zum Beispiel ist In der folgende Zeichenfolge ein, die ich gerne erreichen Wert '3744', was Feld-Trennzeichen soll ich sagen?
$ps axu | grep jboss
jboss 2574 0.0 0.0 3744 1092 ? S Aug17 0:00 /bin/sh /usr/java/jboss/bin/run.sh -c example.com -b 0.0.0.0
cut -d' '
ist nicht das, was ich will, denn es ist nur für einen einzigen Raum.
awk
ist nicht das, was ich Suche, aber wie zu tun, mit 'cut'?
Dank.
- beste Antwort wird mit
tr
wie hier gezeigt: stackoverflow.com/a/4483833/168143 - Nicht direkt relevant für die eigentliche Frage, die Frage, aber statt
ps
+grep
könnten Siepgrep
die verfügbar ist in den meisten modernen Distributionen. Es gibt das Ergebnis genau in der form, die Sie benötigen. - Möglich, Duplikat der Wie man den 'cut' Befehl behandeln mehrere Zeichen als ein Trennzeichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich
awk
ist genau das Werkzeug, das Sie suchen sollten, in:oder Sie können Graben die
grep
insgesamt seitawk
kennt reguläre Ausdrücke:Aber wenn, aus irgendeinem bizarren Grund, Sie wirklich nicht Verwendung
awk
gibt es andere, einfachere Dinge, die Sie tun können, wie alle ausblenden, um whitespace zu einem einzigen space erste:Dass
grep
trick, übrigens, ist eine nette Möglichkeit, um nur diejboss
Prozesse und nicht diegrep jboss
eine (dito für dieawk
Variante auch).Den
grep
Vorgang wird eine wörtlichegrep [j]boss
im Prozess-Befehl ein, so wird Sie nicht gefangen werden durch diegrep
selbst, die sich für die Charakter-Klasse[j]
gefolgt vonboss
.Dies ist eine nette Art zu vermeiden, die
| grep xyz | grep -v grep
Paradigma, dass einige Menschen nutzen.grep
trick scheint nicht zu arbeiten, in crontab-Dateien. Irgendeinen Grund?\s+
für "ein oder mehr Leerzeichen", statt\s\s*
die sagt "Leerzeichen gefolgt von null oder mehr Leerzeichen"awk
version ist wahrscheinlich der beste Weg zu gehen, aber Sie können auchcut
wenn Sie Erstens drücken Sie die wiederholt mittr
:Ich mag den tr -s " - Befehl für diese
Dieser drückt alle Leerzeichen auf 1 Leerzeichen. Auf diese Weise erzählt geschnitten, um ein Leerzeichen als Trennzeichen verwendet wird geehrt als erwartet.
Werde ich nominieren
tr -s [:blank:]
als die beste Antwort.Warum wollen wir anhand der cut? Es ist der Magische Befehl, der sagt "wir wollen das Dritte Feld und jedes Feld nach dem weglassen der ersten beiden Felder"
Ich glaube nicht, dass es eine entsprechende Befehl für awk-oder perl-split, wo wir nicht wissen, wie viele Felder gibt es, ie out put 3. Feld über Feld-X.
Ein Weg, um dieses ist, um zu gehen:
ersetzt mehrere aufeinanderfolgende Leerzeichen durch ein einziges.
\s
ist ein GNU-sed-Erweiterung. Auf OS X können Sie die-E
Flagge, um die sed zu ermöglichen, erweiterte reguläre Ausdrücke, dann verwenden Sie[[:space:]]
im Ort\s
etwa so:sed -E 's/[[:space:]]+/ /g'
Kürzere/einfachere Lösung: verwenden Sie
Schnitte
(Schnitt auf Steroiden, die ich schrieb)Beachten Sie, dass
cuts
Bereich Indizes null-basiert, so dass 5. Feld wird angegeben als 4http://arielf.github.io/cuts/
Und auch kürzer (nicht mit Blut) ist:
Persönlich Neige ich zum awk für Aufgaben wie diese. Zum Beispiel:
ps axu | awk '/[j]boss/ {print $5}'
.Wenn Sie möchten, wählen die Spalten aus, die eine ps-Ausgabe, für jeden Grund, nicht zu verwenden,- o?
z.B.
Minimale Spaltenbreite zugewiesen, keine Polsterung, nur Leerzeichen Feld-separator.
Pid und vsz-10 Zeichen Breite, 1 Raum Trenner.
Verwendet, die in einem Skript:-
Als alternative gibt es immer perl:
Oder, wenn Sie wollen, um alle Felder beginnend bei Feld #3 (wie bereits in einer der oben genannten Antworten):
lsof
ich versuchtelsof|perl -lane 'print $F[5]'
dies manchmal bekommt die 5. Spalte, manchmal 6.Anderen Weise, wenn Sie müssen, verwenden Sie Befehl Ausschneiden
Solaris, awk ersetzen mit
nawk
oder/usr/xpg4/bin/awk
Mag ich immer noch die Möglichkeit Perl Griffe Felder mit Leerzeichen.
Erste Feld ist $F[0].
Mein Ansatz ist die Speicherung der PID in eine Datei in /tmp an und finden Sie den richtigen Prozess, der die
-S
option fürssh
. Das wäre ein Missbrauch aber für mich funktioniert.Besserer Ansatz könnte sein, die Abfrage für die
SSH_PID
rechts, bevor es zu töten, da die Datei ist möglicherweise veraltet, und es würde töten, einen falschen Prozess.