1. 程式人生 > >Linux上用shell批量把檔案的編碼從gb2312轉到utf8

Linux上用shell批量把檔案的編碼從gb2312轉到utf8

背景:專案中用vba寫的SQL指令碼生成工具,生成的SQL裡面含有漢字,檔案編碼全是GB2312。上傳到linux伺服器上,orcale的字符集設定是utf8,用sqlplus執行的時候,日誌中的漢字亂碼,SQL中漢字更新到DB中也是亂碼,發現需要把檔案轉成utf8。改VBA工具來不及了,只好藉助shell了。

思路:正好有一些需要批量替換的schema之類的,一起用Shell實現了。Linux中可以用iconv來實現檔案轉碼,試了一下,伺服器(centos6.9)上正好安裝了。就基於iconv來實現了。想這是先把檔案列表列出來,再通過檔案列表每個檔案進行轉換。由於iconv命令引數比較多,而且是輸出到標準輸出的,只能每個檔案單獨執行。選擇把列表直接轉成shell檔案,來執行。

實現:

#!/bin/sh
#把資料夾名字改一下
mv sql sql_owner
#複製出一份SQL作為備份
cp sql_owner sql_utf8 -Rf
#生成所有檔案列表
ls sql_owner/exp/*.sql -1 > sqllist
#複製一份檔案列表
cp sqllist sqlutf8
#替換複製後的檔名路徑
sed -i "s/sql_owner/ > sql_utf8/g" sqlutf8
#把原檔名的路徑替換成 iconv的命令及引數
sed -i "s/sql_owner/iconv -f gb2312 -t utf8 sql_owner/g" sqllist
#把兩個檔案按行合併到一起,用tab分開,輸出到u.sh檔案中
paste sqllist sqlutf8 > u.sh
#給u.sh加執行許可權
chmod 777 u.sh
#執行u.sh
./u.sh
#刪除中間檔案
rm u.sh sqlutf8 sqllist
#刪除備份的檔案
rm sql_owner -Rf 
#把轉換成utf8的檔案所在資料夾改會sql
mv sql_utf8 sql

經驗:

1,在linux上檢視檔案編碼。可以使用file命令,會輸出檔案編碼。 vim 中可以在命令模式下輸入 set fileencoding,顯示檔案編碼。

2,centos下,vim顯示utf8以外的編碼的檔案會亂碼。可以通過編輯 ~/.vimrc ,追加可識別的檔案編碼。

  例如:set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

  這樣vim就能識別GBK編碼的檔案了。

3,vim開啟檔案直接用:set fileencoding=utf-8也可以直接把檔案轉成utf-8。

相關推薦

Linuxshell批量檔案編碼gb2312utf8

背景:專案中用vba寫的SQL指令碼生成工具,生成的SQL裡面含有漢字,檔案編碼全是GB2312。上傳到linux伺服器上,orcale的字符集設定是utf8,用sqlplus執行的時候,日誌中的漢字亂碼,SQL中漢字更新到DB中也是亂碼,發現需要把檔案轉成utf8。改VBA

檔案編碼格式ANSIUTF8

package test; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F

Jsoup爬取網頁亂碼編碼格式gb2312utf8

最近做的一個專案需要爬取股票公告並存儲於mongodb中用來顯示,當我在用jsoup爬取新浪財經股票公告的時候,發現了亂碼問題。網頁連結如下http://vip.stock.finance.sina.

LinuxJenkins執行shell

目錄 安裝Jenkins Jdk安裝 安裝Jenkins 開啟防火牆 自定義指定埠9000啟動jenkins 瀏覽器登入 修改管理員密碼 建立一個執行shell的任務 構建剛建立的Jenkins任務 檢視執行結果

linux shell批量拷貝檔案

    有時候我們需要將一個檔案拷貝好幾分。批量新增使用者也是同樣的原理的。 使用到的知識: test 或 [ :可用來表示比較的 算數比較 -eq    相等 -ne    不等 -gt    大於 -ge    大於等於 -lt    小於 -le    小於等於 !

每天學點linux--(shell實現將一個資料夾下面的所有檔案拷貝到另一個資料夾下/shell下如何重新命名一個檔案

一、用shell實現將一個資料夾下面的所有檔案拷貝到另一個資料夾下 收穫: 1、在if test -d $1的時候,if後面一定要有空格 2、在使用變數的時候一定要用$! 3、學會`commad`的用法 下面給出程式碼,還有一些不完善的地方,有空補全一下,第一次shell

linux命令批量修改替換檔案內容

在linux入侵之後,我們要清除留下的一些痕跡,比如apache留下的日誌.但是對於ssh登陸日誌比如/var/log/wtmp 和 lastlog這類二進位制檔案,sed命令就愛莫能助了. Linux下批量替換多個檔案中的字串的簡單方法。用sed命令可以批量替換多個檔案

linuxshell腳本刪除mysql記錄ssc源碼搭建

sed caused mit mysq 腳本 don bash jdb use mysql下刪除記錄較多的ssc源碼搭建會出現如下錯誤:企 娥:217 1793 408 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonT

[編譯] 5、在Linux下搭建安卓APP的開發燒寫環境(makefile版)—— 在Linux命令列+VIM開發安卓APP

星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不討論用IDE和文字編輯器開發的優劣,是基於以下兩點考慮去嘗試用命令列編譯安卓APP的: 瞭解安卓APP的編譯過程,瞭解IDE幹了什麼事; 放在打包伺服器上需要自動化生成APP的指令碼; 1)安裝配置環境

linuxvscode寫dotnet core web api

 dotnet core 跨平臺已不再是夢,它帶來的意義非凡,比如api介面可以在linux上編寫及部署,也可以在windows上編寫好,打包釋出,然後copy到linux上部署。        安裝 Ubuntu     &

在arm-linuxgdb除錯程式,出現“Program received signal SIGPIPE, Broken pipe”

        出現這種情況大多是因為程式採用CS架構(伺服器/客戶端)在讀寫操作時出現,我第一次也是在這樣的情況下遇到的。首先我們都知道套接字的通訊方式是雙工的,同端即可寫也可讀。而出現Broken pipe這種情況的原因是寫段正在寫入時,另一端已關閉套接字,這樣程序就會向

Linuxrm刪除的檔案的恢復方法

對於rm,很多人都有慘痛的教訓。我也遇到一次,一下午寫的程式就被rm掉了,幸好只是一個檔案,第二天很快又重新寫了一遍。但是很多人可能就不像我這麼幸運了。本文收集了一些在Linux下恢復rm刪除的檔案的方法,給大家作為參考。   首先,最好的方法是避免這個問題,以下是幾點建議

linuxshell將tomcat做成服務

收下申明下,自己不是很會寫shell,指令碼是查了了自己改的。找了很多個總是有各種各樣的問題,這個是親測沒有問題,希望對讀者有幫助 在 /etc/init.d/ 下面建立檔案 tomcat cd /etc/init.dtouch tomcatvim tomcat 寫入

linux curl請求下載檔案

#include <stdio.h>  #include <unistd.h>  #include <sys/types.h>  #include <sys/socket.h>  #include <sys/stat.h

使用windows命令和iconv.exe批量轉換檔案編碼

 iconv是知名的開源跨平臺編碼轉換庫,iconv.exe是iconv庫在windows下的命令列工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt > utf-8.txt。其中 -f gbk 指明轉換前的檔案編碼是gbk,-t utf-8

使用python實現批量轉換檔案編碼格式

最近在學習redis的原始碼,從網上下載了一份大神註釋好的程式碼,但是檔案編碼格式是utf-8的使用sourcesight開啟會出現亂碼,sourceinsight不支援utf-8格式,網上找了一下,說需要安裝外掛解決,今天主要目的不是整sourceinsight,主要最近在

shell命令讀取檔案,然後一行行輸出

最近面試中遇到這麼一個問題,就是關於用shell自身帶的命令,讀取檔案後一行一行輸出。第一反應就是用cat 來讀取檔案,然後for出來,面試官好像不是很滿意。for i in `cat main.go`do    echo $idone格式出問題。採用whilecat mai

利用nodepad++中的python script外掛批量轉換檔案編碼為utf-8

兩個部落格寫的都很好。 但是沒有講到最重要的怎麼執行這個python指令碼 這裡直接使用了上述文章的文字描述 選擇Plugins->Plugin Manager->Show Plugin Manager 安裝 Python Script。

Linuxshell指令碼for迴圈新增使用者

#!/bin/bash for name in $(more users.list) do if [ -n "$name" ];thenuseradd -m $name echoecho $name"123" | passwd --stdin "$name" echoech

shell 批量替換檔案中指定的字元

   1. sed  命令格式:    sed -i "s/old/new/g" `grep old -rl path`    例如:  把檔案中stv替換為hello  sed -i "s/stv/hello/g" `grep stv -rl ./test/` 只把檔案中“