Câu trả lời:
sed 's/.$//'
Để loại bỏ ký tự cuối cùng.
Nhưng trong trường hợp cụ thể này, bạn cũng có thể làm:
df -P | awk 'NR > 1 {print $5+0}'
Với biểu thức số học ( $5+0
), chúng tôi buộc awk
phải diễn giải trường thứ 5 dưới dạng số và mọi thứ sau số sẽ bị bỏ qua.
Lưu ý rằng GNU df
(của bạn -h
đã là một phần mở rộng GNU, mặc dù không cần thiết ở đây) cũng có thể được yêu cầu chỉ xuất phần trăm sử dụng đĩa:
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(đuôi bỏ qua các tiêu đề và tr loại bỏ mọi thứ trừ các chữ số và dấu phân cách dòng).
Trên Linux, xem thêm:
findmnt -no USE%
{print +$5}
cũng sẽ hoạt động tốt ...
awk
triển khai trong đó không hoạt động , trong đó +
toán tử đơn nguyên chỉ bị bỏ qua và không buộc chuyển đổi chuỗi thành số.
Với sed
, điều này là khá dễ dàng:
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
Cú pháp là s(ubstitute)/search/replacestring/
. Dấu .
hiệu cho biết bất kỳ ký tự nào và $
cuối dòng. Vì vậy, .$
sẽ loại bỏ các ký tự cuối cùng mà thôi.
Trong trường hợp này, lệnh hoàn chỉnh của bạn sẽ trông:
df -h | awk '{ print $5}' | sed 's/.$//'
sed
là dư thừa: nó có thể được thực hiện trong awk
:df -h | awk '{gsub(/%/,""); print $5}'
Tôi có hai giải pháp:
cắt: echo "somestring1" | rev | cut -c 2- | rev
Tại đây bạn đảo ngược chuỗi và cắt chuỗi từ ký tự thứ 2 và đảo ngược lại.
sed: echo "somestring1" | sed 's/.$//'
Tại đây, bạn sẽ tìm kiếm biểu thức chính quy .$
có nghĩa là bất kỳ ký tự nào được theo sau bởi một ký tự cuối cùng và thay thế nó bằng null //
(giữa hai dấu gạch chéo)
Trong awk, bạn có thể làm một trong
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
Cách tiếp cận khác:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
Biến nó thành một chức năng:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
Sau đó gọi nó như thế này:
remove_last '%' df -h
mapfile
là một tính năng bash4.
Điều hấp dẫn ở đây là bạn phải cung cấp một ký tự để loại bỏ; nếu bạn muốn nó chỉ là bất cứ điều gì mà nhân vật cuối cùng xảy ra thì bạn phải vượt qua '?'
hoặc ''
. yêu cầu báo giá.
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
đó là câu trả lời chính xác để đưa mọi thứ trong dòng lên đến '%' đầu tiên.
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
Tùy chọn : Để xóa dòng thứ 1 và dòng cuối, sử dụng sed -ie '1d;$d'
tên tệp
%
dấu hiệu?