我複製粘貼從我的IntelliJ IDE的一些枚舉值到記事本,保存在共享驅動器中的文件,然後在Linux中打開它。當我在文件上做了cat -A
它顯示是這樣的:
A,B,C,^M$
D,E,F,^M$
G,H,I,^M$
周圍搜索後,我想通^ M是回車和$表示文件的最後一行。我只是對這個文件如何能有多個$感到困惑。
我複製粘貼從我的IntelliJ IDE的一些枚舉值到記事本,保存在共享驅動器中的文件,然後在Linux中打開它。當我在文件上做了cat -A
它顯示是這樣的:
A,B,C,^M$
D,E,F,^M$
G,H,I,^M$
周圍搜索後,我想通^ M是回車和$表示文件的最後一行。我只是對這個文件如何能有多個$感到困惑。
$
是行標記的末尾,cat -A
,而不是文件的結尾。
這表示文件具有Windows風格的行結束符(回車符後跟換行符),而不是Unix樣式(僅行換行符)。
(您可以將文本文件從一種格式轉換爲另利用程序dos2unix
或unix2dos
轉換。)
man cat
從我的GNU框:
-A, --show-all
equivalent to -vET
(剪斷)
-E, --show-ends
display $ at end of each line
因此,因爲有多個行,每行具有端多個$
秒。
謝謝您的回答!這就是我不仔細閱讀手冊頁的原因。我希望我可以接受這兩個答案,因爲Porges將它與windows/linux換行符的區別綁定在一起,我會選擇他的答案。再次感謝您的輸入! :) –
嗯,我顯然有些偏見,但你真正的問題是「爲什麼我有多個$ s」;你自己回答了回車位; P我雖然開玩笑說,但同時,很高興你排序了,是的,「人」是一個非常寶貴的工具! –
哦,我真的希望我們被允許選擇兩個答案(儘管這會有點奇怪)。 –
啊是的!有沒有辦法將windows風格的行尾與sed匹配?我已經嘗試過'sed's/\ r \ n //',沒有運氣 –
在sed中,EOL字符'\ n'不被認爲是該行的一部分(一些正則表達式引擎具有「單行模式」整個輸入爲一行,但不是sed AFAIK)。如果你想匹配'\ r \ n',你可以使用'\ r $',它與行末尾的'\ r'匹配(等價)。一個有趣的事實是,一個終端實際上將'\ r'解釋爲「返回到行首」(這是它的原始含義),所以如果你做了sed的/$/.../'on'\ r \ n'您最終會以'...'覆蓋每一行。像「hello \ r \ n」這樣的一行會變成「hello \ r ... \ n」,這樣終端就會寫下「... lo」。 – porges
這清除了我的困惑。我想知道爲什麼它與sed(snip - 'sed':a; N; $!ba; s/\ n// g'')匹配很複雜。事實是非常有趣的,我懷疑這起源於打字機時代(?)。謝謝你的幫助 :) –