GitBash 采用的是 MinGW,而 MinGW 又是从 Cygwin 基础上发展而来的。
GitBash 包含了 Linux 下常用的命令,这里我们要用到 find, iconv, sed 这三个。
1. 批量转换文本文件编码
for i in `find ./ -type f -regex ".*\.js\|.*\.css"` ; do `iconv -f gbk -t utf-8 $i > ${i}.tmp` && mv ${i}.tmp $i ; done
搜索当前目录下所有的 js, css 文件(包括子目录),将文件的编码由 gbk 改为 utf-8
2. 批量添加文本行
$ for i in `find ./ -type f -name "*.asp"` ; do `sed '1i<%@ CodePage=65001 Language="VBScript" %>' $i > ${i}.tmp && mv ${i}.tmp $i` ; done搜索当前目录下所有的 asp 文件(包括子目录),在文件的第一行前添加新行,内容为”<%@ CodePage=65001 Language="VBScript" %>“
3. 说明
3.1 for 语句
for i in 命令1 ; do 命令2 ; done
命令1执行后输出到控制台的文本,被 for 语句进行逐行取出,存为变量 i,再交由命令2 进行执行,实现一个遍历循环。
如果子命令比较复杂,会影响 shell 对其进行解析,如将命令1 中的部分参数当作 for 命令的参数,造成错误。这时可以在命令两边加上 一对 ``(这个字符在数字1键的左边,通常很少被使用)来进行界定;当然,如果命令语句比较简单,也可以不加。
3.2 find 语句
find 路径 参数
这里的路径是当前工作目录:./,参数用了三个:
-type f
表示中搜索普通文件;
-name 文件名(可以使用通配符)
表示搜索什么文件;
-regex 正则表达式
这里用正则表达式来进行文件名匹配。 ".*\.js\|.*\.css",这里的 “\” 是转义符。".*" 表示任意多个字符,"\.js"表示后缀名为 .js,"\|" 这是或的意思,这里就是搜索后缀名为 js 或 css 的文件。
3.3 iconv 语句
iconv -f 源编码 -t 目标编码 文件名
所以,上面的命令就是将 文件 $i 从 gbk 编码转为 utf-8 编码。
3.4 sed 语句
sed ’指令语句‘ 文件名
这里,关键的是指令语句,1iXXXXX 的意思是在第 1 行前面插入新行,内容是紧跟随后的文本。更多指令查看命令手册。
3.5 mv 语句
这是文件重命名,不作详述。
3.6 > 管道符 及 && 操作符
前者是将标准输出转向到其它设备,这里是指向一个文件。因为 iconv 和 sed 命令都是将内容直接输出的屏幕上的(标准输出设备),所以用 > 来将输出转向到文件,这样就会创建新文件,以 tmp 为后缀,产生一个临时文件,再用 mv 命令覆盖到原文件名去。
后者是逻辑操作符,通常用来在一条语句中执行两条命令,&& 是与操作,也就是说,只有前条执行没有出错,才会执行后条语句。
4. 要进行文本内容替换,可以用 sed 命令,另外也可以用 notepad++ 的查找替换功能,支持多文件查找替换。按 ctrl + F,选择 Find in files,也支持正则表达式。
---Over---
本文介绍如何使用GitBash、find、iconv、sed等命令批量转换文本文件编码,并在特定文件类型的第一行添加指定内容。通过for循环、find命令筛选文件、iconv进行编码转换、sed实现内容插入,最后使用mv完成文件重命名。同时提供文本内容替换的方法,以及使用notepad++的查找替换功能进行多文件操作。
3011

被折叠的 条评论
为什么被折叠?



