Jawaban:
sed 's/.$//'
Untuk menghapus karakter terakhir.
Tetapi dalam kasus khusus ini, Anda juga bisa melakukan:
df -P | awk 'NR > 1 {print $5+0}'
Dengan ekspresi aritmatika ( $5+0
) kami memaksa awk
untuk menafsirkan bidang ke-5 sebagai angka, dan apa pun setelah angka tersebut akan diabaikan.
Perhatikan bahwa GNU df
(Anda -h
sudah merupakan ekstensi GNU, meskipun tidak diperlukan di sini) juga dapat diberitahu untuk hanya menampilkan persentase penggunaan disk:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(Ekor melewatkan header dan tr menghapus semuanya kecuali digit dan garis pembatas).
Di Linux, lihat juga:
findmnt -no USE%
{print +$5}
akan bekerja juga ...
awk
implementasi di mana itu tidak berfungsi , di mana +
operator unary diabaikan dan tidak memaksa konversi string ke numerik.
Dengan sed
, ini cukup mudah:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
Sintaksnya adalah s(ubstitute)/search/replacestring/
. The .
menunjukkan karakter apapun, dan $
pada akhir baris. Jadi .$
akan menghapus karakter terakhir saja.
Dalam hal ini, perintah lengkap Anda akan terlihat:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
redundan: dapat dilakukan di awk
:df -h | awk '{gsub(/%/,""); print $5}'
Saya punya dua solusi:
memotong: echo "somestring1" | rev | cut -c 2- | rev
Di sini Anda membalikkan string dan memotong string dari karakter ke-2 dan membalikkannya lagi.
sed: echo "somestring1" | sed 's/.$//'
Di sini Anda akan mencari ekspresi reguler .$
yang berarti setiap karakter diikuti oleh karakter terakhir dan menggantinya dengan nol //
(antara dua garis miring)
Dalam awk, Anda bisa melakukan salah satunya
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
pendekatan lain:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Ubah fungsi menjadi:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Kemudian panggil seperti ini:
remove_last '%' df -h
mapfile
adalah fitur bash4.
Tangkapannya di sini adalah Anda harus menyediakan karakter untuk dihapus; jika Anda ingin hanya menjadi apa pun karakter terakhir terjadi maka Anda harus lulus '?'
atau ''
. diperlukan harga.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
yang merupakan jawaban yang benar untuk mendapatkan semuanya sesuai dengan '%' pertama.
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
Opsional : Untuk menghapus baris pertama dan terakhir, gunakan sed -ie '1d;$d'
nama file
%
pertanda?