Shell 脚本的小实战
2016-04-19 15:57
453 查看
Shell 脚本的小实战
这件事要说,还要从放寒假后没几天说起,那个时候邓老师的数据结构MOOC要在Edx上线,招字幕翻译支援者。在下虽然是个英语渣渣,但舍不得放弃这次学习机会。然后想想,虽然在下英语烂,但是在下身边有英语好的人呀,这样的刷经验的机会如果放过了实在可惜。所谓冲动是魔鬼,我一激动,就报名了,联系了一位英语较好的同学为我审稿,然后也通过了试翻译的片段。我翻译的章节是最后一章12章。
一开始我是直接讲翻译好的稿子去掉中文部分发给同学的,后来为了方便她看选择了保留中文部分。她发回来给我的文章也是包含中文部分的。
作为一个拖延症晚期患者,中文部分我都是留着的,准备最后再删除。
然后,这个最后的时刻终于到来了。
打开来以后是这样的,上面的乱码是中文部分,我用字幕软件gnome-subtitles打开是没有乱码的。
一篇一篇删除,应该也不会太麻烦,可是会很累啊。
听说Linux下Shell编程很是强大,不如我们试一下把。
限于本人水平,下面的方法可能会比较蠢,欢迎吐槽。
1.一个C语言的删除中文的小程序
根据我的观察,全英文的那行,除了我手残输入一些中文的标点符号,其他的都应该是ASCII码的字符。而乱码部分也就是中文部分,基本没有ASCII编码的字符。所以程序如下:
const int size = 1000; int main() { std::ios::sync_with_stdio(false);cin.tie(0); int i,j; char str[size]; while (cin.getline(str,size,'\n')){ int cnt1 = 0,cnt2 = 0; for (i=0;str[i]!='\0';i++){ if (str[i]>0&&str[i]<128) cnt2++; else cnt1++; } if (cnt1<cnt2) cout << str << endl; } return 0; }
就是上面这个样子啦
处理后的对比图
2.一个遍历srt文件,将他们使用上述程序处理,重定向至另一个文件夹的Shell脚本
#!bin/sh for file in ./*.srt do ~/tmp < $file ~/tmp < $file >~/Desktop/testout/$(basename $file) done就算不会写,也应该能看懂才是,上述转换程序编译后名字是tmp,第一行仅输入重定向,将输出写到屏幕上,方便我检查程序运行的结果。后一行我讲输出结果送到桌面下的testout文件夹中,并以相同名字命名,basename命令负责提取处文件去掉路径之后的名称。
3.结尾的小插曲
因为经常和审稿的那位同学在linux和windows下不停的转换,我也学会了将文件的编码在UTF-8和GBK之间互相转换,并不知道接受者使用的是哪种编码,但是作为一个负责人的人,我应该把任务完成的漂漂亮亮。因此最后将GBK和UTF-8两种格式的字幕都发过去吧。#!bin/sh for file in ./*.srt do iconv $file -c -f UTF-8 -t GBK -o ~/Desktop/12-GBK/$(basename $file) echo $file done转换编码,我使用的是linux自带的iconv工具。
然后,打包发给负责人,我的任务就这样完成啦。
相关文章推荐
- 使用Shell脚本查询服务器硬件信息
- linux load 监控,负载监控 ,shell 监控cpu,memory,load average,记录到log
- bash操作小结
- 已解决:登录Linux的 bash4.2$ 问题
- Android_adb shell am/pm使用
- shell 怎么删除文件的最后一行
- ShellExecute
- Shell : debug
- Windows下使用wxPython的pycrust交互shell方法。运行pywrap命令
- Linux Shell脚本之更新hosts文件以便于访问谷歌服务
- bash shell 的知识点--参考书
- linux 命令行和shell 脚本编程--了解shell
- Shell: test
- hbase经常使用的shell命令样例
- linux集群运维工具:clustershell和pssh
- Shell编程详解
- shell脚本基础知识
- Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法
- CMake 调用 Shell 脚本
- Linux shell学习