2012-09-13 32 views
0

我複製粘貼從我的IntelliJ IDE的一些枚舉值到記事本,保存在共享驅動器中的文件,然後在Linux中打開它。當我在文件上做了cat -A它顯示是這樣的:

A,B,C,^M$ 
D,E,F,^M$ 
G,H,I,^M$ 

周圍搜索後,我想通^ M是回車和$表示文件的最後一行。我只是對這個文件如何能有多個$感到困惑。

回答

0

$是行標記的末尾,cat -A,而不是文件的結尾。

這表示文件具有Windows風格的行結束符(回車符後跟換行符),而不是Unix樣式(僅行換行符)。

(您可以將文本文件從一種格式轉換爲另利用程序dos2unixunix2dos轉換。)

+0

啊是的!有沒有辦法將windows風格的行尾與sed匹配?我已經嘗試過'sed's/\ r \ n //',沒有運氣 –

+0

在sed中,EOL字符'\ n'不被認爲是該行的一部分(一些正則表達式引擎具有「單行模式」整個輸入爲一行,但不是sed AFAIK)。如果你想匹配'\ r \ n',你可以使用'\ r $',它與行末尾的'\ r'匹配(等價)。一個有趣的事實是,一個終端實際上​​將'\ r'解釋爲「返回到行首」(這是它的原始含義),所以如果你做了sed的/$/.../'on'\ r \ n'您最終會以'...'覆蓋每一行。像「hello \ r \ n」這樣的一行會變成「hello \ r ... \ n」,這樣終端就會寫下「... lo」。 – porges

+1

這清除了我的困惑。我想知道爲什麼它與sed(snip - 'sed':a; N; $!ba; s/\ n// g'')匹配很複雜。事實是非常有趣的,我懷疑這起源於打字機時代(?)。謝謝你的幫助 :) –

1

man cat從我的GNU框:

-A, --show-all 
      equivalent to -vET 

(剪斷)

-E, --show-ends 
      display $ at end of each line 

因此,因爲有多個行,每行具有端多個$秒。

+0

謝謝您的回答!這就是我不仔細閱讀手冊頁的原因。我希望我可以接受這兩個答案,因爲Porges將它與windows/linux換行符的區別綁定在一起,我會選擇他的答案。再次感謝您的輸入! :) –

+0

嗯,我顯然有些偏見,但你真正的問題是「爲什麼我有多個$ s」;你自己回答了回車位; P我雖然開玩笑說,但同時,很高興你排序了,是的,「人」是一個非常寶貴的工具! –

+0

哦,我真的希望我們被允許選擇兩個答案(儘管這會有點奇怪)。 –

相關問題