Saya ingin menghapus karakter terakhir dari sebuah baris:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
Hasil yang diharapkan:
Use
22
1
1
59
51
63
5
text-processing
Özzesh
sumber
sumber
%
pertanda?Jawaban:
Untuk menghapus karakter terakhir.
Tetapi dalam kasus khusus ini, Anda juga bisa melakukan:
Dengan ekspresi aritmatika (
$5+0
) kami memaksaawk
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:(Ekor melewatkan header dan tr menghapus semuanya kecuali digit dan garis pembatas).
Di Linux, lihat juga:
sumber
{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: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:
sumber
sed
redundan: dapat dilakukan diawk
: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)sumber
Dalam awk, Anda bisa melakukan salah satunya
sumber
pendekatan lain:
Ubah fungsi menjadi:
Kemudian panggil seperti ini:
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.sumber
sumber
Coba dengan ini:
Penggunaan normal adalah: (yaitu)
Respons harus: X987654321X
sumber
sumber
cut -d '%' -f1
yang merupakan jawaban yang benar untuk mendapatkan semuanya sesuai dengan '%' pertama.Opsional : Untuk menghapus baris pertama dan terakhir, gunakan
sed -ie '1d;$d'
nama filesumber
sumber