亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的工具輸出要覆蓋自己,以及如何修復它?

為什么我的工具輸出要覆蓋自己,以及如何修復它?

為什么我的工具輸出要覆蓋自己,以及如何修復它?這個問題的目的是為那些回答為“你有DOS行結尾”的日常問題提供一個答案,這樣我們就可以簡單地把它們作為這個問題的副本關閉,而不重復相同的答案。令人作嘔.注:這不是任何現存問題的復本。..這個問答的目的不僅是提供一個“運行這個工具”的答案,也是為了解釋這個問題,這樣我們就可以在這里指出任何有相關問題的人,他們會找到一個清晰的解釋,解釋為什么他們被指向這里,以及運行的工具,從而解決他們的問題。我花了幾個小時閱讀所有現有的問答,他們都缺乏對這個問題的解釋,可以用來解決問題的替代工具,以及/或可能的解決方案的利弊/注意事項。另外,他們中的一些人已經接受了一些簡單而危險的答案,不應該被使用。現在回到典型問題這將導致在這里轉介:我有一個包含1行的文件:what isgoingon當我使用這個awk腳本打印它時,反轉字段的順序:awk '{print $2, $1}' file我沒有看到預期的輸出:isgoingon what我得到的字段應該在行的末尾,出現在行的開頭,在行的開頭覆蓋一些文本: whatngon或者我把輸出分割成兩行:isgoingon  what問題是什么,我該如何解決?
查看完整描述

3 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

您可以使用\R 速記字符類在……里面PCRE對于具有未知行尾的文件。對于Unicode或其他平臺,還有更多的行要考慮。這個\RForm是Unicode財團推薦的字符類,用于表示泛型換行符的所有形式。

因此,如果您有一個“額外的”,您可以找到并刪除它的正則表達式。s/\R$/\n/是否將行尾的任何組合規范化為\n..或者,您可以使用s/\R/\n/g捕捉“行尾”的任何概念,并將其標準化為\n性格。

給予:

$ printf "what\risgoingon\r\n" > file
$ od -c file0000000    w   h   a   t  \r   i   s   g   o   i   n   g   o   n  \r  \n0000020

Perl和Ruby以及大多數PCRE實現\R結合字符串斷言的結尾$(多行模式的行尾):

$ perl -pe 's/\R$/\n/' file | od -c0000000    w   h   a   t  \r   i   s   g   o   i   n   g   o   n  \n    
0000017$ ruby -pe '$_.sub!(/\R$/,"\n")' file | od -c0000000    w   h   a   t  \r   i   s   g   o   i   n   g   o   n  \n    
0000017

(注意\r這兩個詞之間正確地保持單獨)

如果你沒有\R您可以使用等效的(?>\r\n|\v)在PCRE。

使用直接的POSIX工具,您的最佳選擇可能是awk就像這樣:

$ awk '{sub(/\r$/,"")} 1' file | od -c0000000    w   h   a   t  \r   i   s   g   o   i   n   g   o   n  \n    
0000017

一些有用的東西(但知道你的局限性):

tr刪除所有\r即使在另一個上下文中使用(允許使用\r是罕見的,而xml處理要求\r被刪除,所以tr是一個很好的解決方案):

$ tr -d "\r" < file | od -c0000000    w   h   a   t   i   s   g   o   i   n   g   o   n  \n        
0000016

GNUsed工程,但不是POSIXsed\r\x0D在POSIX上不支持。

僅GNU sed:

$ sed 's/\x0D//' file | od -c   # also sed 's/\r//'0000000    w   h   a   t  \r   i   s   g   o   i   n   g   o   n  \n    
0000017

這個Unicode正則表達式指南可能是什么是“新線”的最終治療的最佳選擇。


查看完整回答
反對 回復 2019-07-01
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

劑量2..雖然您可以用自己編寫的代碼來操作行尾,但是在Linux/Unix世界中已經有一些實用工具為您這樣做了。

如果在Fedora系統上dnf install dos2unix會把dos2unix工具就位(如果沒有安裝)。

有一個類似的dos2unixDEB軟件包可用于基于Debian的系統。

從編程的角度來看,轉換很簡單。搜索文件中的所有字符以查找序列\r\n并將其替換為\n.

這意味著有幾十種方法可以使用幾乎所有可以想象的工具從DOS轉換到Unix。一個簡單的方法是使用命令tr在這里你只需替換\r一無所有!

tr -d '\r' < infile > outfile


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關注
  • 481 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號