जवाबों:
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 सब कुछ हटा देती है लेकिन अंक और रेखा सीमांकक)।
लिनक्स पर, यह भी देखें:
findmnt -no USE%
{print +$5}
के रूप में अच्छी तरह से काम करेंगे ...
awk
कार्यान्वयन हैं जहां यह काम नहीं करता है , जहां +
एक्री संचालक को केवल अनदेखा किया जाता है और स्ट्रिंग्स के संख्यात्मक में रूपांतरण के लिए मजबूर नहीं करता है।
इसके साथ 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
यहां आप स्ट्रिंग को उल्टा करते हैं और स्ट्रिंग को 2nd कैरेक्टर से काटते हैं और फिर से रिवर्स करते हैं।
सीड: echo "somestring1" | sed 's/.$//'
यहां आप नियमित अभिव्यक्ति की खोज करेंगे, .$
जिसका अर्थ है कि किसी भी वर्ण का अंतिम वर्ण और उसके बाद इसे शून्य //
(दो स्लैश के बीच) से बदल दें
जागने में, आप एक कर सकते हैं
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 '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'
फ़ाइल नाम का उपयोग करें
%
संकेत है?