[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 跟我一起学文本处理:gsed/gawk快速入门[20130416更新]

本帖最后由 namejm 于 2013-4-16 20:53 编辑

前言

  自从淡出论坛之后,namejm一直在批处理的文本处理方面无所进展,转而求诸perl、ruby、AutoHotKey之流,零敲碎打,一事无成。
  忽有一日,zm900612传给我一份关于sed处理文本的流程的介绍资料,阅后顿觉丹田发热,任督二脉中气流乱窜,四肢百骸无比舒坦,一时间耳聪目明,以往向我紧闭的gsed/gawk大门轰然洞开, 从此步入用gsed/gawk处理文本的坦途。
  以往在仅仅使用纯批处理代码的时候,处理单个文件尚觉得心应手,但是,文件一旦多起来,或者体积急剧增大之后,要处理的情况就更复杂了,不使用命令行工具来增强批处理代码,往往会束手无措。自从用上了gsed/gawk之后,海量数据的处理也游刃有余。每每看到论坛里很多人还在无比艰辛地用纯批处理来操作文本,总觉无比心酸——要是换成gsed/gawk来做,该是多么轻松的一件事情啊!于是萌发了写一个关于gsed/gawk快速入门教程的想法,把我对gsed/gawk的理解与大家分享。
  这个教程,我不会弄成一个事无巨细的帮助手册,只挑选那些我认为会经常用到的功能来重点介绍,既有内功心法,也有具体招式,着眼于让大家迅速入门,可能会有一些图片来增强讲解效果。由于本人尚未精通gsed/gawk,不可能高屋建瓴做全面的讲解,也没有做系统的讲解规划,下面的介绍也只是我的入门理解,可能还存在着这样或那样的错误,希望发现了问题的xdjm能予以指正,谢谢。
  但愿它不要再像N年前的那个for教程那样,拖拖拉拉更新了两年多,最后虎头蛇尾弄成了个烂尾工程,吊人胃口不说,还有误人子弟之嫌。

  教程的初步大纲如下

一、 我为什么需要gsed/gawk
二、 gsed/gawk很难学吗
三、 如何获取gsed/gawk
四、 使用gsed/gawk的3种方式
五、 gsed/gawk的处理过程
六、 gsed/gawk下的正则表达式
七、 gsed的简要讲解
八、 gawk的简要讲解
九、 常见代码讲解
十、 其他
3

评分人数

    • lky216: 文采极好技术 + 1
    • plp626: 期待大作PB + 10
    • cjiabing: 谢谢辛苦工作好分享!~PB + 12 技术 + 1
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

回复 39# CrLf


   
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 38# cjiabing


    我塞给站长5000块,买他一条命

TOP

回复 37# CrLf


   这个PowerShell 怎么禁言了?
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 36# Batcher


    别这么高冷嘛...

TOP

回复 35# 我来了


    无所谓啊,反正你又不学。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

2年过去了,仍然是占楼。。备用。

TOP

回复 33# tommytangtang


    师傅领进门,修行在个人。

TOP

这帖子到这里就没了?

TOP

本帖最后由 CrLf 于 2013-7-6 16:10 编辑

回复 31# PowerShell


    大数计算有 bc,*nix 的 shell 理念是将工作分为不同部分交给专家各自完成,再将粘合起来,而且这个过程非常快,十分利于构造代码和分块调试,而且内置的 python 更是支持无限长整型的运算的胶水语言,所以不需要什么全能的工具,因为无所不能的只有操作系统...
    另外,据说 c语言、perl、python、awk 的语法是比较相似的,也就是说只要对其中一门有所涉猎,其他几门语言的学习曲线都有高起点,所以 awk 的语法其实并不冷僻。

TOP

本帖最后由 PowerShell 于 2013-7-6 15:40 编辑

实际上,用批处理写代码是非常辛苦的:没有专门的调试器调试代码只能手工一遍又一遍不厌其烦地添加/删除echo和pause语句、在黑乎乎的cmd窗口中观察代码的运行结果;------------powershell的开发环境有3,1系统自带的powershell ise。2 免费的powershell gui,这个是我用的,有单补,断点啥的。开发调试图形软件的,powershell studio。

大数或浮点数计算,还得自行设计算法、甚至模拟手工算式进行按位计算;-----。net有无限大整数,浮点数等,专业数学计算一般调用f#来完成。我想awk sed也不能算这些吧。


字符串操作,仅提供了几个简陋的查找、替换功能,更复杂的操作,只能for了再for,call了再call,即使你折腾得昏天黑地,也不见得就能实现你的目标-----powershell字符串操作有正则。有字符转义等。



总而言之,windows下的很多文字处理语句/工具,虽然能实现某些操作,但是这些功能的实现是需要付出沉重代价的:要么操作部位无法做到精准、要么字符串不能超长、要么会丢失一些特殊字符、要么处理效率异常低下难以忍受。如果不借助外部工具,在windows下用批处理对文本进行操作,即使你绞尽脑汁使出浑身解数,甚至仍然无法实现某些功能。-------不是win不行,而是用的方法太老,powershell2006年就出来了,现在都13年了。还有强大的面向对象方法!!!


即使在批处理的世界里摸爬滚打了6、7年,在接触到gsed和gawk之前,每当需要用批处理来处理一大堆文本时,我都如履薄冰,我常扪心自问:这些文本有超长字符串的行存在吗?包含特殊字符吗?替换时能做到精准匹配吗?如果是海量数据,处理速度够快吗……每当这些问题萦绕于心时,我总会有一种心虚气短头皮发麻的感觉。

  自从找到了powershell之后,我保你烦恼就一扫而空了。随我信powershell神教吧~~~~
我乃microsoft教,powershell派,powershell交流宗,宗主。俗称传教士。不要去学魔教的awk  sed了。我教创世之神乃比尔盖茨 嘎嘎。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 PowerShell 于 2013-7-6 08:50 编辑

好有空一起研究一下大家。
应该和python脚本做法差不多,

我不知道win下的awk,sed ,比linux下的差多少。一般来说应该是差些,因为毕竟不是为win优化的,但是win awk可以用win下的其他工具,这是linux所不具备的。

类似,powershell也是如此。总之各有特色。


另外,比如日志处理,这类文本应用。由于linux一般无图形界面,所以脚本编程处理日志居多。而win,早有人写好了日志处理工具。这些工具大都是图形的,有的是c,c++,语言开发的,所以有可能比linux下处理日志还快。也就是win+c程序pk linux+脚本程序。也不一定非要用powershell。总之win下选择很多。

那么由于linux脚本处理日志是重头戏,又经多年优化,有可能性能比powershell略强,而且powershell从微软的意图,不是用来主要处理日志的,各位看官不可不知。

不过呢,要用 用例事实说话,不可yy,还是要pk下。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 28# PowerShell


    想学PowerShell,版主能否给几个具体的文本处理的例子,说明一下PowerShell和awk、sed的比较?也好增加我初学者的信心。

TOP

有空我打算找帮powershell人跟你pk下,awk sed 语法晦涩。就是搜索替换。
虽然免不了正则和搜索替换,但powershell是面向对象的,从这个角度来看,
python powershell兄弟俩,组团,pk awk sed兄弟俩。-----没错,我就是来砸场子的。呵呵。


---------以下为我的预言-----------
powershell 要pk的话,由于没有专业优化,性能比py略差。
但powershell有win下的多种对象,如excel,world。python3有很多库,这兄弟俩各有特色。
他俩代码绝对比awk sed简单。

你有搜索替换,我有面向对象神功。后续内容敬请期待。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

想找一 MS-DOS 最新版本的 谁能帮助一下 先谢
还有发现  MS-DOS 下的用法和WIN 用法不一样啊

TOP

返回列表