當前位置:首頁 » 網頁前端 » shell腳本中iconv用法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

shell腳本中iconv用法

發布時間: 2022-05-21 13:37:10

A. linux shell 遍歷文件夾 並將結果保存 到變數

#!/bin/bash
(($#<1))&&echo"paramiszero!"&&exit1
[!-d$1]&&echo"$1notpath"&&exit1
dir=$1
dir_p="$dirDirectory:"
cd$dir
dir=`pwd`
foriin`ls$dir`
do
if[-d$i];then
/tmp/sh/dir_file$i#我的腳本文件在/tmp/sh中,需要改一下這里
else
dir_p="$dir_pFile$i"
fi
done
cd..
echo$dir_p


實驗結果:

[root@localhost sh]# ./dir_file /tmp/python/

python_2 Directory : File 1.log File 2.log

python_3 Directory : File 3.log

/tmp/python/ Directory : File p File t.py File y.py


這樣應該可以吧,試試看

B. 如何在Linux系統實現字元編碼轉換

Linux下提供了iconv實現這一功能,在Linux 的 shell 環境下,iconv用法如下:
iconv -f fromconde -t tocode
-f: 指定需要轉換的文本編碼
-t: 指定目標文本編碼

我們也可以用 -l 列舉出所有已知的字元編碼集合

iconv -l

具體用法可以通過幫助函數 iconv --help來詳細了解

另外,我們也可以在程序中直接使用該函數實現文本的編碼轉換

#ifndef __CODE_CONVERTER
#define __CODE_CONVERTER
#ifdef WIN32
#include <windows.h>
#else
#include <iconv.h>
#endif
class CodeConverter
{
private:
#ifndef WIN32
iconv_t m_cd;
#endif
const char* m_pszFromCode;
const char* m_pszToCode;
public:
CodeConverter()
{
m_pszFromCode = NULL;
m_pszToCode = NULL;
#ifndef WIN32
m_cd = 0;
#endif
}
~CodeConverter()
{
#ifndef WIN32
iconv_close(m_cd);
#endif
}
bool Initialize(const char *pszToCode, const char *pszFromCode);
size_t Convert(char* inBuf, size_t inBytesLeft, char* outBuf, size_t outBytesLen);
};
#endif

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "code_converter.h"
#include <errno.h>
bool CodeConverter::Initialize(const char* pszToCode, const char* pszFromCode)
{
if(pszFromCode == NULL || pszToCode == NULL) return false;
m_pszFromCode = pszFromCode;
m_pszToCode = pszToCode;
#ifndef WIN32
m_cd = iconv_open(m_pszToCode,m_pszFromCode);
if(m_cd == (iconv_t)-1)
{
printf("cannot open iconv descripter\n");
return false;
}
#endif
return true;
}
size_t CodeConverter:: Convert(char* inBuf, size_t inBytesLeft, char* outBuf, size_t outBytesLen)
{
int nRealLen = 0;
#ifdef WIN32
if(stricmp(m_pszFromCode,"UNICODE") == 0)
{
nRealLen = WideCharToMultiByte(CP_ACP,0,(PWCHAR)inBuf, inBytesLeft, (PCHAR)outBuf, outBytesLen,NULL,NULL);
}
if(stricmp(m_pszFromCode,"gb2312") == 0)
{
nRealLen = MultiByteToWideChar(CP_ACP,0,(PCHAR)inBuf,inBytesLeft,(PWCHAR)outBuf, outBytesLen);
}
#else
size_t outBytesLeft = outBytesLen;
size_t ret = 0;
while (1)
{
ret = iconv(m_cd, &inBuf, &inBytesLeft, &outBuf, &outBytesLeft);
if (ret == 0) break;
if (ret == (size_t)-1)
{
printf("iconv error aaa: %s\n",strerror(errno));
return -1;
}
inBuf++; inBytesLeft--;
}
nRealLen = outBytesLen-outBytesLeft;
outBuf[nRealLen]=0;
#endif
return nRealLen;
}

C. iconv."$data1">"$dataf1"這里兩個變數,如果在shell裡面執行沒問題,可是寫到sh語句裡面執行就有問題了

那兩個變數應該是兩個文件名吧?

你按這個試試呢

D. shell哪個命令可以將uicode編碼轉換成中文

使用iconv命令即可,大多數Linux發布版都自帶:
先把包含編碼「\u82f9\u679c」的文件保存為這個名字:pingguo_UTF16.txt
然後執行下面命令:

iconv -f UTF16 -t UTF8 pingguo_UTF16.txt > pingguo_UTF8.txt
iconv -f UTF16 -t GB18030 pingguo_UTF16.txt > pingguo_GB18030.txt
用文本編輯器打開查看這兩個(pingguo_UTF8.txt / pingguo_GB18030.txt)新文件即可。

E. 【求助】請問為什麼要學習linux下的shell編程

不能拿學習其它編程語言的概念來學習shell,學習shell,主要就是學會linux下各種工具的使用,然後用shell語言把他們聯合起來達到一定的目的,拿身邊真實的例子說說 1 用excel軟體先把數據轉換成csv文件,比如用空格隔開每一行的數據 2 使用iconv把文件轉為utf8編碼 3 使用awk把文件內容轉為sql的insert語句 4 然後傳入mysql程序插入數據 所有步驟可以寫成一個簡單的shell語句,形式上如下: cat somedata.csv | iconv -to utf8 | gawk '{print ......}' | mysql -uroot -pxxxxx 這樣做的好處是: 1 可以用現成的軟體組合出你需要的功能,而不是一個特定的軟體,比如這里的iconv和awk 2 這些軟體學一次就可以用一輩子,可以用於各種不同的場合,達到所想即所得 3 開發成本低,還可以寫成一個腳本,然後用corntab定時調用 更多的交流可以給我發郵件: [email protected]

F. 怎麼用SHELL命令轉換語言編碼格式

是轉換文本文件的編碼格式么,用iconv:

ICONV(1) Linux User Manual ICONV(1)

NAME
iconv - convert text from one character encoding to another

SYNOPSIS
iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]...

G. linux 怎麼修改shell的字元屬性

查看文件編碼file命令

file ip.txt

查看文件編碼file命令

file ip.txt

ip.txt: UTF-8 Unicode text, with escape sequences

一、利用iconv命令進行編碼轉換文件內容編碼轉換

iconv命令用於轉換指定文件的編碼,默認輸出到標准輸出設備,亦可指定輸出文件.

用法: iconv [選項...] [文件...]

有如下選項可用:

輸入/輸出格式規范:

-f, --from-code=名稱 原始文本編碼

-t, --to-code=名稱 輸出編碼

信息:

-l, --list 列舉所有已知的字元集

輸出控制:

-c 從輸出中忽略無效的字元

-o, --output=FILE 輸出文件

-s, --silent 關閉警告

--verbose 列印進度信息

-?, --help 給出該系統求助列表

--usage 給出簡要的用法信息

-V, --version 列印程序版本號

例子:

iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt

這個命令讀取aaa.txt文件,從utf-8編碼轉換為gb2312編碼,其輸出定向到bbb.txt文件.

你可照著上面的命令格式,改改試試。

H. xshell幫助命令注釋無法更改為中文注釋

一、在Windows里用文本編輯器將該文件另存為同名文件,在編碼欄選擇utf-8,這樣保存之後,在Linux里便不會亂碼了。
二、使用iconv命令轉碼
命令格式:$ iconv -f gb18030 -t utf-8 -o {目標文件} {源文件}

I. shell腳本怎麼修改編碼

首先,我得知道這個文件具體採用的是什麼樣的編碼,如果是ISO-8859我將會把它轉成UTF-8,其他的ASCII這些都先不做處理,這里可以使用file filename或者是enca iconv

enca需要獲取下:sudo apt-get install enca

iconv的一般用法是:(可以man iconv)

-f from code 源文件編碼

-t to code 目標文件編碼

-o output file 保存為文件

例子:

iconv -f GB2312 -t UTF-8 -o google.txt google.txt

將google.txt的編碼由GB2312更新為UTF-8

enca也同上用法,一般在腳本中對於未曾提供的語言,enca不會報錯,這樣可以保證腳本順利執行

enca -L zh_CN file 檢查文件編碼

enca -L zh_CN -x UTF-8 file 將文件編碼修改為UTF-8並覆蓋文件

具體的用法都可以去查看man手冊或者google之

好了,不多說,查看腳本吧!

#!/bin/bash -x

#由於之前使用windows系統來存放過一些文本文件,利用dropbox同步過來的時候,文件發生亂碼,故寫腳本來批量處理

#這里是對所有的需求文件進行處理,後續可根據修改目錄進行處理

SUBFIX="txt html htm conf"

#cd /home/gavin/tmp

if [ -z $1 ];then
cd $PWD
else
if [ -d $1 ];then
cd $1
else
echo " $1 is not exist;"
exit 1
fi
fi

for i in $SUBFIX;
do
files=`find . -name "*.$i"`
for f in $files;
do
type=`file $f|awk -F':' '{print $2}' |awk '{print $1}'` #獲取文件類型
if [ $type = "ISO-8859" ];then
#iconv -f GB2312 -t UTF-8 -o $f $f
enca -L zh_cn -x UTF-8 $f
else
echo "$f encoding is :$type"
fi

done
done

J. 怎樣在Shell中把utf8編碼轉成中文顯示

可以使用編碼轉換工具iconv iconv命令可以將一種已知的字元集文件轉換成另一種已知的字元集文件。它的作用是在多種國際編碼格式之間進行文本內碼的轉換。