Antworten:
sed 's/.$//'
Das letzte Zeichen entfernen.
In diesem speziellen Fall können Sie jedoch auch Folgendes tun:
df -P | awk 'NR > 1 {print $5+0}'
Mit dem arithmetischen Ausdruck ( $5+0
) erzwingen wir awk
, 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:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(tail überspringt die Überschriften und tr entfernt alles außer den Ziffern und den Zeilenbegrenzern).
Unter Linux siehe auch:
findmnt -no USE%
{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:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
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:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
ist überflüssig: Es kann getan werden in awk
: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).
In awk könnten Sie eines von tun
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
Ein anderer Ansatz:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Verwandle es in eine Funktion:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Dann nenne es so:
remove_last '%' df -h
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.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
die richtige Antwort ist, um alles in der Zeile bis zum ersten '%' zu bringen.
sed -ie '$d' filename
here -i is to write changes
e means expression
$ means last line
d means delete
Note:Without -e option $ wont work
Optional : Verwenden Sie zum Löschen der ersten und letzten Zeile den sed -ie '1d;$d'
Dateinamen
%
Zeichen?