ฉันต้องการลบตัวละครตัวสุดท้ายออกจากบรรทัด:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
ผลลัพธ์ที่คาดหวัง:
Use
22
1
1
59
51
63
5
ฉันต้องการลบตัวละครตัวสุดท้ายออกจากบรรทัด:
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
ผลลัพธ์ที่คาดหวัง:
Use
22
1
1
59
51
63
5
คำตอบ:
sed 's/.$//'
เพื่อลบตัวอักษรตัวสุดท้าย
แต่ในกรณีเฉพาะนี้คุณสามารถทำได้:
df -P | awk 'NR > 1 {print $5+0}'
ด้วยนิพจน์ทางคณิตศาสตร์ ( $5+0
) เราบังคับawk
ให้ตีความฟิลด์ที่ 5 เป็นตัวเลขและทุกอย่างที่อยู่หลังตัวเลขจะถูกละเว้น
โปรดทราบว่า GNU df
(ของคุณ-h
เป็นส่วนขยาย GNU อยู่แล้ว แต่ไม่จำเป็นต้องใช้ที่นี่) สามารถบอกให้คุณส่งออกเฉพาะเปอร์เซ็นต์การใช้ดิสก์:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(หางข้ามส่วนหัวและ tr ลบทุกอย่างยกเว้นตัวเลขและตัวคั่นบรรทัด)
บน Linux ดูได้จาก:
findmnt -no USE%
{print +$5}
จะทำงานได้ดี ...
awk
ใช้งานมากมายที่ไม่สามารถใช้งานได้ซึ่งตัว+
ดำเนินการ unary เพิ่งถูกเพิกเฉยและไม่บังคับให้แปลงสตริงเป็นตัวเลข
ด้วยsed
วิธีนี้ค่อนข้างง่าย:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
s(ubstitute)/search/replacestring/
ไวยากรณ์ .
บ่งชี้ตัวอักษรใด ๆ และ$
ในตอนท้ายของบรรทัด ดังนั้น.$
จะลบตัวอักษรตัวสุดท้ายเท่านั้น
ในกรณีนี้คำสั่งทั้งหมดของคุณจะมีลักษณะ:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
ซ้ำซ้อน: สามารถทำได้ในawk
:df -h | awk '{gsub(/%/,""); print $5}'
ฉันมีสองวิธี:
ตัด: echo "somestring1" | rev | cut -c 2- | rev
ที่นี่คุณย้อนกลับสตริงและตัดสตริงจากอักขระที่ 2 และย้อนกลับอีกครั้ง
ใจเย็น ๆ echo "somestring1" | sed 's/.$//'
ที่นี่คุณจะค้นหานิพจน์ทั่วไป.$
ซึ่งหมายถึงอักขระใด ๆ ตามด้วยอักขระตัวสุดท้ายและแทนที่ด้วย null //
(ระหว่างเครื่องหมายทับทั้งสอง)
ใน awk คุณสามารถทำอย่างใดอย่างหนึ่ง
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
วิธีอื่น:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
เปลี่ยนเป็นฟังก์ชั่น:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
จากนั้นเรียกมันว่าสิ่งนี้:
remove_last '%' df -h
mapfile
เป็นคุณสมบัติของ bash4
การจับที่นี่คือคุณต้องจัดหาตัวละครที่จะลบ ถ้าคุณอยากให้มันเป็นแค่สิ่งที่ตัวอักษรตัวสุดท้ายเกิดขึ้นเป็นแล้วคุณจะต้องผ่านหรือ'?'
''
ต้องมีเครื่องหมายคำพูด
$ df -h | awk '{print $5}' | cut -d '%' -f1
ลองกับสิ่งนี้:
df -h | awk '{ print $5 }' | sed "s/%//"
การใช้งานปกติคือ: (เช่น)
VALUE=987654321
echo X123456789X | sed "s/123456789/${VALUE}/"
การตอบสนองควรเป็น: X987654321X
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
ซึ่งเป็นคำตอบที่ถูกต้องเพื่อให้ได้ทุกอย่างในบรรทัดจนถึง '%' ครั้งแรก
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
ทางเลือก : ในการลบsed -ie '1d;$d'
ชื่อไฟล์บรรทัดที่ 1 และบรรทัดสุดท้าย
echo "123" | perl -ple 'chop'
12
%
สัญญาณเสมอหรือไม่?