問題:
Windows下的TXT文件上傳到Linux系統(tǒng)上,用cut,grep.sed,awk等文本處理工具處理過后再次傳到Windows電腦上判没,發(fā)現(xiàn)內(nèi)容都連到一塊了,百度了一下才知道換行符被刪除了,
so扶踊,問題來了,怎么處理就不會把換行符刪除郎任?
在Windows下編寫的文件秧耗,當(dāng)在Linux下用 cat -v filename 命令查看時,可以發(fā)現(xiàn)每行的結(jié)尾都有^M字符舶治。當(dāng)我們在Linux下寫的應(yīng)用程序在讀取含有^M字符的文件時分井,會出現(xiàn)意想不到的錯誤。所以需要將Windows下文件的格式轉(zhuǎn)換為Linux下的文件格式霉猛。
仍存在的疑惑:
在我的vi中打開含有^M的文件尺锚,設(shè)置 :set list 只能看到以“$”表示的換行符,并沒有看到有^M字符惜浅。使用 :%/^M$//g 進(jìn)行替換也沒有找到缩麸。
注意:To get the ^M do not actually enter it as is. Insert it by typing the CTRL-V CTRL-M sequence instead.
去除^M的方法:
去除^M的方法很多,總結(jié)一些如下:
方法1:在vi中轉(zhuǎn)換文件的格式,直接輸入以下命令杭朱,然后 :wq阅仔。
:set fileformat=unix
:set fileformat=dos
方法2:使用col命令
cat file_win | col -b > file_linux
cat file_win | col -b | tee file_linux
方法3:使用tr命令
cat file_win | tr -d '/r' > file_linux
cat file_win | tr -d '/r' | tee file_linux
實例:
公司以前沒有固定的郵箱地址,現(xiàn)在想統(tǒng)一郵箱地址弧械,所以域名備案八酒,使用第三方的郵箱服務(wù)器;對方需要我們的人數(shù)及用戶名刃唐。人事統(tǒng)計了公司所有人的郵箱地址做成一個Excel表格發(fā)給我了羞迷。
幾百個人画饥,我要一個個的把郵箱后綴都去掉衔瓮,不知道怎么Excel表格里弄,所以就想到把這一列復(fù)制到一個TXT文件中抖甘,然后上傳到我的Linux主機上热鞍,用文本處理工具處理就方便很多了。
但是處理完后薇宠,再次傳回Windows主機,打開一看澄港,全是一堆字母。才知道換行符也被我處理了回梧。
]# cut -d@ -f1 a.txt >b.txt 命令將提取郵箱的用戶名并保存到b.txt文件中
正確的方法
a.txt文件的內(nèi)容
]# cat -v a.txt???????????????????? #看到原文件里每行結(jié)尾都有^M字符
]# cp a.txt b.txt????????????????? #備份
vi b.txt? vi?????????????????????????? #編輯
:set fileformat=unix??????????? #設(shè)置格式為Unix
:wq???????????????????????????????????? #保存退出
]# cut -d@ -f1 b.txt >c.txt? #截取b文件里的用戶名并保存到c里
vi c.txt??????????????????????????????? #編輯c
:set fileformat=dos??????????? #將格式改為dos
:wq??????????????????????????????????? #保存退出
]# sz c.txt?????????????????????????? #將文件傳到Windows上祖搓,將文件上傳至Linux上的命令是rz漂辐,程序包是lrzsz
????????????????????????????????????????????? 沒有就yum install lrzsz 安裝
參考博客:delphiwcdj的專欄