Shell 脚本的小实战

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工具。

然后,打包发给负责人,我的任务就这样完成啦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值