जवाबों:
sed 's/.$//'
अंतिम पात्र को हटाने के लिए।
लेकिन इस विशिष्ट मामले में, आप भी कर सकते हैं:
df -P | awk 'NR > 1 {print $5+0}'
अंकगणितीय अभिव्यक्ति ( $5+0) के साथ हम awk5 वें क्षेत्र को एक संख्या के रूप में व्याख्या करने के लिए मजबूर करते हैं, और संख्या के बाद कुछ भी अनदेखा किया जाएगा।
ध्यान दें कि 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'फ़ाइल नाम का उपयोग करें
%संकेत है?