2012-07-19 84 views
12

時丟了,我有一個包含一些乳膠文件:擊:特殊字符閱讀文件

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

我想在bash腳本來閱讀:

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} 

爲什麼我會丟失反斜槓和最初的空格?

如何保留它們?

+1

你在做什麼每行都需要你逐行閱讀?現在,當然,你可以用'cat my.tex'替換while循環。 – chepner 2012-07-19 16:21:53

+0

我實際上檢查每一行是什麼,因爲我想保留兩個特殊「標籤」之間的文件的一部分。 – Barth 2012-07-19 17:14:29

回答

17

你失去了反斜槓和空格,因爲bash(通過其內置讀取)正在評估文本的值 - 替換變量,查找轉義字符(製表符,換行符)等。有關詳細信息,請參閱the manpage。此外,回聲將結合空白。

至於保存他們,我不知道你可以。您可能會通過執行後反斜槓:

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

它應該修改讀取而不嘗試評估反斜槓。不過,它可能仍會吞噬領先空間。

編輯:$IFS特殊變量設置爲空字符串,像這樣:

export IFS= 

會導致空格在這種情況下被保留。

+2

引用'$ line'也應該保留空格。 – chepner 2012-07-19 16:20:51

+0

@chepner - 這就是我的想法;當然,如果'$ line'中有空格,這是真的,但事實證明(在我的系統上)它們在被放入'$ line'之前被'read'剝離。 – 2012-07-19 16:22:29

+0

謝謝你,-r就是我正在尋找的東西。 – Barth 2012-07-19 17:15:20

0

您是否可以使用perl來滿足部分或全部腳本要求?

perl -lne 'print;' my.tex 

如果您稍後必須殼出一些其他的工具,你可能仍然有問題,除非你可以在文件傳遞所需的數據。