Ich möchte das letzte Zeichen aus einer Zeile entfernen:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
Erwartetes Ergebnis:
Use
22
1
1
59
51
63
5
text-processing
Özzesh
quelle
quelle
%
Zeichen?Antworten:
Das letzte Zeichen entfernen.
In diesem speziellen Fall können Sie jedoch auch Folgendes tun:
Mit dem arithmetischen Ausdruck (
$5+0
) erzwingen wirawk
, das 5. Feld als Zahl zu interpretieren, und alles nach der Zahl wird ignoriert.Beachten Sie, dass GNU
df
(Ihre-h
ist bereits eine GNU-Erweiterung, hier jedoch nicht erforderlich) auch angewiesen werden kann, nur den Prozentsatz der Festplattennutzung auszugeben:(tail überspringt die Überschriften und tr entfernt alles außer den Ziffern und den Zeilenbegrenzern).
Unter Linux siehe auch:
quelle
{print +$5}
wird auch funktionieren ...awk
Implementierungen, bei denen das nicht funktioniert , bei denen der+
unäre Operator einfach ignoriert wird und die Konvertierung von Strings in numerische nicht erzwingt .Mit
sed
ist das ziemlich einfach:Die Syntax lautet
s(ubstitute)/search/replacestring/
. Das.
kennzeichnet ein beliebiges Zeichen und$
das Ende der Zeile. So.$
wird nur das letzte Zeichen entfernt.In diesem Fall würde Ihr vollständiger Befehl folgendermaßen aussehen:
quelle
sed
ist überflüssig: Es kann getan werden inawk
:df -h | awk '{gsub(/%/,""); print $5}'
Ich habe zwei Lösungen:
Schnitt:
echo "somestring1" | rev | cut -c 2- | rev
Hier kehren Sie die Zeichenfolge um und schneiden die Zeichenfolge vom 2. Zeichen ab und kehren sie erneut um.
sed:
echo "somestring1" | sed 's/.$//'
Hier suchen Sie nach regulären Ausdrücken
.$
, dh Zeichen, auf die ein letztes Zeichen folgt, und ersetzen es durch Null//
(zwischen den beiden Schrägstrichen).quelle
In awk könnten Sie eines von tun
quelle
Ein anderer Ansatz:
Verwandle es in eine Funktion:
Dann nenne es so:
mapfile
ist eine bash4 Funktion.Der Haken dabei ist, dass Sie ein Zeichen angeben müssen, um es zu entfernen. wenn du willst, dass es genau das ist, was das letzte Zeichen ist, musst du
'?'
oder übergeben''
. Anführungszeichen erforderlich.quelle
quelle
Versuchen Sie es mit diesem:
Der normale Gebrauch ist:
Die Antwort sollte lauten: X987654321X
quelle
quelle
cut -d '%' -f1
die richtige Antwort ist, um alles in der Zeile bis zum ersten '%' zu bringen.Optional : Verwenden Sie zum Löschen der ersten und letzten Zeile den
sed -ie '1d;$d'
Dateinamenquelle
quelle