2012-07-19 11 views
12

पढ़ने खो मैं कुछ लेटेक्स वाली फ़ाइल है:बैश: विशेष वर्ण जब फ़ाइल

while read line 
    do 
    echo $line 
    done < "my.tex" 

उत्पादन

begin{figure}[ht] 
centering 
includegraphics[scale=0.15]{logo.pdf} 
caption{Example of a pdf file inclusion} 
label{fig:pdfexample} 
है:

\begin{figure}[ht] 
\centering 
\includegraphics[scale=0.15]{logo.pdf} 
\caption{Example of a pdf file inclusion} 
\label{fig:pdfexample} 
\end{figure} 

मैं एक bash लिपि में इसे पढ़ने के लिए चाहते हैं

मैंने बैकस्लैश और प्रारंभिक रिक्त स्थान क्यों खो दिए?

उन्हें कैसे संरक्षित करें?

+1

आप प्रत्येक पंक्ति में क्या कर रहे हैं जिसके लिए आपको इसे लाइन-दर-लाइन पढ़ने की आवश्यकता है? अभी, निश्चित रूप से, आप 'cat my.tex' के साथ लूप को प्रतिस्थापित कर सकते हैं। – chepner

+0

मैं वास्तव में प्रत्येक पंक्ति पर क्या जांचता हूं क्योंकि मैं दो विशेष "टैग" के बीच फ़ाइल का हिस्सा रखना चाहता हूं। – Barth

उत्तर

17

आपने बैकस्लाश और रिक्त स्थान खो दिए हैं क्योंकि बैश (इसके पढ़ने के माध्यम से) पाठ के मूल्य का मूल्यांकन कर रहा है - प्रतिस्थापन चर (टैब, न्यूलाइन) आदि की तलाश करने वाले चर को प्रतिस्थापित करना आदि। कुछ विवरणों के लिए the manpage देखें। इसके अलावा, गूंज सफेद जगह को जोड़ देगा।

जहां तक ​​उन्हें संरक्षित किया गया है, मुझे यकीन नहीं है कि आप कर सकते हैं। आप शायद ऐसा करके वापस बैकस्लैश मिल चाहते हैं:

while read -r line 
    do 
    echo $line 
    done < "my.tex" 

जो पढ़ को संशोधित करना चाहिए बैकस्लैश का मूल्यांकन करने की कोशिश नहीं करते हैं। हालांकि, यह अभी भी प्रमुख रिक्त स्थान निगल जाएगा।

संपादित करें:, रिक्त स्ट्रिंग पर $IFS विशेष चर की स्थापना इस तरह:

export IFS= 

कारण होगा रिक्त स्थान इस मामले में संरक्षित करने की।

+2

'$ line' को उद्धृत करने से रिक्त स्थान भी संरक्षित होना चाहिए। – chepner

+0

@chepner - यही मैंने सोचा; निश्चित रूप से यदि '$ line' में रिक्त स्थान हैं तो यह सच है, लेकिन यह पता चला कि (मेरे सिस्टम पर) वे '$'' में डालने से पहले' पढ़े 'द्वारा छीन रहे थे। –

+0

धन्यवाद, -आर वह है जिसे मैं ढूंढ रहा था। – Barth

0

क्या आप भाग या अपनी सभी स्क्रिप्ट आवश्यकताओं के लिए perl का उपयोग कर सकते हैं?

perl -lne 'print;' my.tex 

आप बाद में किसी अन्य उपकरण के लिए खोल-आउट, आप अभी भी एक समस्या हो सकती है चाहिए, जब तक आप एक फ़ाइल में आवश्यक डेटा पारित कर सकते हैं।