एक शेल चर के लिए grep परिणाम निर्दिष्ट करने के बाद नई लाइन खोना


80
#!/usr/local/bin/bash
out=`grep apache README`
echo $out;

आमतौर पर grep कमांड लाइन पर चलने पर प्रत्येक मैच को एक अलग लाइन पर दिखाता है। हालांकि, उपरोक्त लिपियों में, प्रत्येक मैच को अलग करने वाली नईलाइन गायब हो जाती है। क्या किसी को पता है कि न्यूलाइन को कैसे संरक्षित किया जा सकता है?

shell 


जवाबों:


105

आप इसे असाइनमेंट में नहीं बल्कि गूंज में खो रहे हैं। आप इसे स्पष्ट रूप से देख सकते हैं यदि आप:

echo "${out}"

आपको निम्न स्क्रिप्ट के साथ एक समान प्रभाव दिखाई देगा:

x="Hello,
I
am
a
string
with
newlines"
echo "====="
echo ${x}
echo "====="
echo "${x}"
echo "====="

कौन से आउटपुट:

=====
Hello, I am a string with newlines
=====
Hello,
I
am
a
string
with
newlines
=====

और, आपके प्रश्न के लिए अप्रासंगिक है, लेकिन मैं इसे वैसे भी उल्लेख करना चाहता हूं, मैं बैकस्टिक्स के बजाय $ () निर्माण का उपयोग करना पसंद करता हूं, बस घोंसले के आदेशों में सक्षम होने के अतिरिक्त लाभ के लिए। तो आपकी स्क्रिप्ट लाइन बन जाती है:

out=$(grep apache README)

अब यह कोई भिन्न नहीं दिख सकता है (और यह नहीं है) लेकिन यह अधिक जटिल आदेशों को संभव बनाता है जैसे:

lines_with_nine=$(grep $(expr 7 + 2) inputfile)

2
मुझे नहीं पता था कि आप $ () के साथ ऐसा कर सकते हैं ... यहां हर समय कुछ नया सीखें।
तंज

1
आप expr का उपयोग किए बिना गणित कर सकते हैं। बस डबल-पैरेंस का उपयोग करें: $ ((7 + 2))
बैरी ब्राउन

वास्तव में मैं कोशिश कर सकता हूं कि अब से मेरे सभी उत्तरों के साथ - झुंड की शिक्षा के लिए प्रासंगिक (हमेशा पूरी तरह से) प्रासंगिक स्निपेट न करें :-)
paxdiablo

अच्छा बिंदु, बैरी, लेकिन यह सिर्फ घोंसले के शिकार का एक उदाहरण था - मेरा उदाहरण-सृजन कौशल उम्र (और / या शराब :-)) के साथ बिगड़ गया है।
paxdiablo

मुझे बस $ (()) चीज के बारे में पता चला, खुद।
बैरी ब्राउन


20

बैश में वैरिएबल को उद्धृत करना व्हॉट्सएप को संरक्षित करता है।

उदाहरण के लिए:

#!/bin/bash
var1="A B  C   D"
echo $var1   # A B C D
echo "$var1" # A B  C   D

चूंकि नई लाइनें व्हॉट्सएप हैं, इसलिए उन्हें "हटा दिया" जाता है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.