Bash
एक फ़ाइल (डेटा स्ट्रीम, चर) लाइन-बाय-लाइन (और / या फ़ील्ड-बाय-फ़ील्ड) पढ़ें?
खोज…
पैरामीटर
पैरामीटर | विवरण |
---|---|
भारतीय विदेश सेवा | आंतरिक क्षेत्र विभाजक |
फ़ाइल | एक फ़ाइल नाम / पथ |
-r | रीड के साथ उपयोग किए जाने पर व्याख्या को रोकता है |
-t | readarray द्वारा पढ़ी गई प्रत्येक पंक्ति से एक अनुगामी न्यूलाइन निकालता है |
-d DELIM | तब तक जारी रखें, जब तक कि DELIM का पहला चरित्र ( read साथ), न कि नईलाइन के बजाय |
फ़ाइल (/ etc / passwd) लाइन को लाइन और फ़ील्ड द्वारा फ़ील्ड में पढ़ता है
#!/bin/bash
FILENAME="/etc/passwd"
while IFS=: read -r username password userid groupid comment homedir cmdshell
do
echo "$username, $userid, $comment $homedir"
done < $FILENAME
यूनिक्स पासवर्ड फ़ाइल में, उपयोगकर्ता जानकारी लाइन द्वारा लाइन में संग्रहीत की जाती है, प्रत्येक लाइन में कॉलोन (:) वर्ण द्वारा अलग किए गए उपयोगकर्ता के लिए जानकारी होती है। इस उदाहरण में, लाइन द्वारा फाइल लाइन को पढ़ते समय, लाइन को भी कॉलोन वर्ण का उपयोग करके क्षेत्रों में विभाजित किया जाता है जो कि सीमांकक के रूप में होता है जो IFS के लिए दिए गए मान से इंगित होता है।
नमूना इनपुट
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
नमूना आउटपुट
mysql, 27, MySQL Server /var/lib/mysql
pulse, 497, PulseAudio System Daemon /var/run/pulse
sshd, 74, Privilege-separated SSH /var/empty/sshd
tomcat, 91, Apache Tomcat /usr/share/tomcat6
webalizer, 67, Webalizer /var/www/usage
लाइन को लाइन से पढ़ने के लिए और पूरी लाइन को वेरिएबल में असाइन किया गया है, निम्नलिखित उदाहरण का एक संशोधित संस्करण है। ध्यान दें कि हमारे पास यहाँ उल्लेखित नाम रेखा से केवल एक चर है।
#!/bin/bash
FILENAME="/etc/passwd"
while IFS= read -r line
do
echo "$line"
done < $FILENAME
नमूना इनपुट
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
नमूना आउटपुट
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
किसी सरणी में फ़ाइल की पंक्तियाँ पढ़ें
readarray -t arr <file
या एक लूप के साथ:
arr=()
while IFS= read -r line; do
arr+=("$line")
done <file
फ़ाइल लाइन के माध्यम से लूपिंग लाइन द्वारा
while IFS= read -r line; do
echo "$line"
done <file
यदि फ़ाइल में अंत में एक नई पंक्ति शामिल नहीं हो सकती है, तो:
while IFS= read -r line || [ -n "$line" ]; do
echo "$line"
done <file
किसी स्ट्रिंग की पंक्तियों को एक सरणी में पढ़ें
var='line 1
line 2
line3'
readarray -t arr <<< "$var"
या एक लूप के साथ:
arr=()
while IFS= read -r line; do
arr+=("$line")
done <<< "$var"
लाइन द्वारा एक स्ट्रिंग लाइन के माध्यम से लूपिंग
var='line 1
line 2
line3'
while IFS= read -r line; do
echo "-$line-"
done <<< "$var"
या
readarray -t arr <<< "$var"
for i in "${arr[@]}";do
echo "-$i-"
done
लाइन द्वारा कमांड लाइन के आउटपुट के माध्यम से लूपिंग
while IFS= read -r line;do
echo "**$line**"
done < <(ping google.com)
या एक पाइप के साथ:
ping google.com |
while IFS= read -r line;do
echo "**$line**"
done
फ़ाइल फ़ील्ड फ़ील्ड द्वारा पढ़ें
मान लेते हैं कि क्षेत्र विभाजक है :
(कोलन) फ़ाइल फ़ाइल में ।
while IFS= read -d : -r field || [ -n "$field" ]; do
echo "$field"
done <file
एक सामग्री के लिए:
first : se
con
d:
Thi rd:
Fourth
आउटपुट है:
**first **
** se
con
d**
**
Thi rd**
**
Fourth
**
फ़ील्ड द्वारा एक स्ट्रिंग फ़ील्ड पढ़ें
मान लेते हैं कि क्षेत्र विभाजक है :
var='line: 1
line: 2
line3'
while IFS= read -d : -r field || [ -n "$field" ]; do
echo "-$field-"
done <<< "$var"
आउटपुट:
-line-
- 1
line-
- 2
line3
-
किसी फ़ाइल के फ़ील्ड को एक सरणी में पढ़ें
मान लेते हैं कि क्षेत्र विभाजक है :
arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
arr+=("$field")
done <file
किसी स्ट्रिंग के फ़ील्ड को एक सरणी में पढ़ें
मान लेते हैं कि क्षेत्र विभाजक है :
var='1:2:3:4:
newline'
arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
arr+=("$field")
done <<< "$var"
echo "${arr[4]}"
आउटपुट:
newline
फ़ील्ड द्वारा कमांड फ़ील्ड के आउटपुट के माध्यम से लूपिंग
मान लेते हैं कि क्षेत्र विभाजक है :
while IFS= read -d : -r field || [ -n "$field" ];do
echo "**$field**"
done < <(ping google.com)
या एक पाइप के साथ:
ping google.com | while IFS= read -d : -r field || [ -n "$field" ];do
echo "**$field**"
done