2011-03-22 16 views
13

मैं आगे उपयोग के लिए एक चर के लिए ग्रेप परिणाम प्रदान करना चाहते हैं:नई लाइन के साथ grep परिणाम कैसे संरक्षित करें?

lines=`cat abc.txt | grep "hello"` 

लेकिन क्या मैंने पाया $ लाइनों अब और न्यू लाइन वर्ण नहीं है। तो जब मैं

echo $lines 

केवल एक पंक्ति मुद्रित होती है। मैं न्यूलाइन कैरेक्टर को कैसे संरक्षित कर सकता हूं, इसलिए जब मैं $ लाइनों को प्रतिबिंबित करता हूं, तो यह बिल्ली abc.txt जैसा ही है grep "हैलो"।

+5

बिल्ली के समान दुरुपयोग: 'लाइनों = $ (ग्रेप हैलो abc.txt)' । –

+0

यह भी देखें http://stackoverflow.com/questions/613572/capturing-multiple-line-output-to-a-bash-variable/ –

उत्तर

32

आप

echo "$lines" 

echo $lines 

के बजाय कहने के लिए विस्तार करने के लिए करना चाहते हैं:

echo $lines का अर्थ है "lines नामित चर की सामग्री के साथ $lines की जगह एक नया आदेश फार्म, echo कमांड के लिए शून्य या अधिक नए तर्क बनाने के लिए इसे व्हाइटस्पेस पर विभाजित करें। परीक्षा के लिए मिसाल:

lines='1 2 3' 
echo $lines # equivalent to "echo 1 2 3" 
lines='1 2 3' 
echo $lines # also equivalent to "echo 1 2 3" 
lines="1 
2 
3" 
echo $lines # also equivalent to "echo 1 2 3" 

सभी इन उदाहरणों, बराबर हैं क्योंकि खोल व्यक्ति चर lines में संग्रहीत शब्दों के बीच खाली स्थान के एक विशिष्ट प्रकार की उपेक्षा करता है। असल में, अधिक सटीक होने के लिए, खोल विशेष IFS (आंतरिक फ़ील्ड सेपरेटर) चर के पात्रों पर परिवर्तनीय की सामग्री को विभाजित करता है, जो डिफ़ॉल्ट रूप से (बैश के मेरे संस्करण पर) तीन अक्षरों की जगह, टैब और न्यूलाइन पर डिफ़ॉल्ट रूप से विभाजित होता है ।

echo "$lines", दूसरी तरफ, वेरिएबल lines के सटीक मान से एक नया तर्क बनाने का मतलब है।

अधिक जानकारी के लिए, बैश मैन्युअल पृष्ठ के "विस्तार" और "शब्द विभाजन" अनुभाग देखें।

+1

धन्यवाद, यह काम करता है। क्या आप अंतर समझा सकते हैं? बहुत उपयोगी सहयोग के लिए – Dagang

+3

+1। – harpo

0

grep के लिए विंडोज पोर्ट का उपयोग करना (मूल प्रश्न नहीं, मैं वाह और * निक्स पर लागू नहीं)। मैंने पाया कि -U ने अच्छी तरह से समस्या हल की है।

--help से:

यू, --binary EOL पर सीआर वर्ण न निकालें (MSDOS)

+0

यह काम करता है। धन्यवाद @ हागिसब्रिथ। -यू लॉग का उपयोग नई लाइन के साथ मुद्रित हो रहा है। grep कमांड है ... इलेक्ट्रॉन app.js | grep --line-buffered -i -e "त्रुटि" -यू | tee logs.txt – Gaurav

संबंधित मुद्दे