中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]除了sed,还有哪些文本流工具支持原文件直接修改?
<<   [1] [2]  >>   >
作者:
标题: [求助]除了sed,还有哪些文本流工具支持原文件直接修改? 上一主题 | 下一主题
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『楼 主』:  [求助]除了sed,还有哪些文本流工具支持原文件直接修改?

发现一个看似小问题却很难解决的: 删除文件末尾的一个换行符 因为多数文本流工具都是行处理,完了每行后跟一个换行,但问题就来了,到最后总是会多一个换行符造成一个空行。我在处理有些东西的时候就遇到了,想用sed来删除这个换行符,却怎么都不行,sed总是会知己再加上那个换行符。 最后只用gawk解决了,不过gawk不支持原文件修改,还是比较麻烦的 用的修改代码是: gawk 'NR^>1{print a}{a=$0}END{ORS="";print a}' file 还有其它文本流处理能支持原文件修改吗?


2008-4-24 09:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

没有,都不可以直接修改愿文件


2008-4-25 13:35
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 3 楼』:  

Originally posted by vkill at 2008-4-25 01:35 PM: 没有,都不可以直接修改愿文件
至少,sed是可以的 ……我想应该不止sed一个的吧,那么多的文本处理命令~


2008-4-29 12:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 4 楼』:  

直接修改源文件应该是没有的。即使notepad也是在内存中修改好后,再保存的 sed顶多是用H、h来保存,再在最后一行时,G、g。修改好后再输出到源文件。 这样的操作,gawk也是可以的。


2008-4-29 13:02
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 5 楼』:  

也许误会我意思了,我的意思就是能直接处理再保存进原来的文件,该它自己内部是怎么处理的,是不是借用了内存空间什么的。 也就是我自己不用去建临时文件了 sed 加-i 就能直接修改文件,不用自己再改么回存的。 awk却是没这功能的。 就是不知道其它啥命令能支持直接改文件的。  (读文件再直接定向写回原文件,是不可行的,我在awk里面试过,出问题)


2008-4-29 13:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 6 楼』:  

这个工具和sed都支持源文本直接修改,推荐下,那个更好用先体验体验。。。 ------------------ wfr - 支持多国语言的字符串批量查找和替换 - 批量字符集编码转换 ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ 功能简介 ■ 纯 unicode 规则匹配内核,真正支持各国语言文字的正则匹配。 ■ 带有兼容性检查的字符集编码转换功能。同时支持 GUN libiconv(iconv.dll) 和 Windows 自带的字符集编码转换 API。 ■ 支持一次性指定多个文件通配符和文件列表。 ■ 支持管道模式,与其它命令协同工作;支持半管道模式,从文件中获取输入,但将结果写到标准输出。 ■ 支持包含子目录。 ■ 支持普通匹配、正则匹配、可忽略大小写、可跨行匹配。替换时可以使用正则的子表达式。 ■ 同时支持 posix 标准的扩展正则表达式及 perl 风格的正则匹配。 ■ 可以格式化替换内容为全大写或全小写,便于在批处理中对环境变量和命令行参数做大小写一致化处理。 ■ 支持 DOS(Windows)、Macintosh 和 unix 风格的换行符,可选择自动识别(默认)或手动指定。 ■ 统计功能,列出每个文件中的替换次数、总替换次数等。 ■ 支持Win32和纯DOS环境(纯DOS环境中需要 HX DOS Extender 支持)。 ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ Unicode 正则匹配 wfr 内部使用作者自己捣鼓的 UNICODE 正则匹配引擎。咳...咳..该引擎功能强大,效率出众,绝对是外出打鸟……(以下暂省10000字,有空再补上 ;) )。 以下举例说明: ■ 小写类能够正确匹配各国小写字母。如:中文全角字母“abcd”;希腊字母“α、β、ω”;俄文字母“ж、я、щ” 等等。 ■ 大写类能够匹配各国大写字母。如:全角字母“ABCD”;希腊字母“Α、Β、Ω”;俄文字母“Ж、Я、Щ”等等。 ■ 字符类能匹配各国字母(中日韩的汉字也属于该类)。 ■ 标点类能够匹配各国标点符号,如:“、,。……『』”等等。 ■ 所有操作都支持宽字符,例如,表达式:“[我你他她它]们”将被正确处理。 其它(数字、空白符、词边界等等)以此类推,全方位支持多语言。以上字符分类的规则 遵循UNICODE标准分类(UNICODE General Category Values)具体请参考:www.unicode.org ...。 关于 UNICODE 正则的操作效率,这个引擎比我能找到的所有开源的非 UNICODE 匹配引擎至少快一倍左右(因为所有字符类的匹配都是直接查表映射的,都是标准 O(1) 算法)。 不过这只是匹配引擎的效率,由于所有文件在“匹配->替换”前后都要做一次编码转换,所以典型应用下,wfr 效率比 fr 低一些。wfr 并不是 fr 的升级版,能够用 fr 搞定的任务不推荐用 wfr 完成。 ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ 字符集编码 wfr 支持分别指定三个参量的字符集编码: ■ 输入编码:输入文件或管道中内容的字符集编码。默认为当前系统的默认代码页。 ■ 输出编码:完成搜索->替换操作后,要输出到目标文件或管道中的编码。默认与输入编码相同。 ■ 参数编码:指定搜索和替换参数的内容使用何种字符集编码。默认为当前系统的默认代码页。 例如:“wfr *.txt *.htm -r:"[иウ]" -t:"狟ね" -encarg:big5 -encin:gbk -encout:utf-8 -s” 把当前目录和所有子目录下的任何 txt 及 htm 文件中的“[你我他她它]们” 都替换为“朋友们”;文件的编码为:gbk,参数使用 big5 指定,替换后将文件格式改为 utf-8 编码保存。 咋一看指定参数编码好像没用,其实不然。例如在异种语言环境下(如在中文系统下操作韩文)的搜索替换;在DOS下使用wfr(DOS的系统默认代码页永远是ASCII)等场合,指定参数编码是很有意义的。 关于字符集转换功能库,如果当前系统搜索路径中存在 GUN 的 libiconv 库(iconv.dll),则优先使用 libiconv,否则使用操作系统自带的字符集转换 API。这样做的考虑如下: ■更严谨和稳定的结果:iconv 比 Windows 的字符集转换 API 更严格,不会出现意想不到的乱码和连篇问号等情况。 ■更有保障的支持:Windows 能否成功完成指定字符集编码转换,很大程度上取决于用户是否安装了相关的代码页文件。在任何部署了 libiconv 库的计算机中,该库支持的字符集编码都能够被正确地转换。 ■跨平台支持:libiconv 可以用于几乎所有已知的平台。 =========================================================================== 应用示例: wfr *.txt *.htm -f:teh -t:the wfr *.txt -fic:"My Dir" -tu:"%ROOTDIR%" type server.log | wfr /r:"Connected.*218.79" /t:"**Attack** \0" type server.log | wfr /r:"^(Smith|James).*\n" /t unzip -l *.zip | wfr /r:"^(.{22}:\d\d\s*|(A| \a| -|.*files$).*\n)" /t wfr *.txt /s /any /encin:gbk /encout:utf-8 wfr *.log /any /encin:ucs-2 /encout:gbk /stdout | OtherApp.exe ... wfr *.txt *.htm -r:"张(\a+/>)" -t:"李\1" wfr *.txt *.htm -r:"[你我他她它]们" -t:"朋友们" ========================================================================== 下载: rthost.fam.cx/cndos- ... [ Last edited by plp626 on 2008-4-29 at 01:32 PM ]




山外有山,人外有人;低调做人,努力做事。 进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-29 13:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 7 楼』:  

sed -i 实际 也是有 临时文件的。。 只是 写入临时文件 和 覆盖你源文件 它给你做了而已。。


2008-4-29 13:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 8 楼』:  

Originally posted by bjsh at 2008-4-29 01:33 PM: sed -i 实际 也是有 临时文件的。。 只是 写入临时文件 和 覆盖你源文件 它给你做了而已。。
所有的支持源文件修改的应该都是这个原理吧?




山外有山,人外有人;低调做人,努力做事。 进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-29 13:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 9 楼』:  

不管它用什么原理的吧,只要能减少硬盘io和用户操作步骤就OK了 plp,这个wfr是哪里找到的啊,gg了一下没找到说明啥的。cygwin包里也没有的。 它是哪个系统下拿过来的?


2008-4-29 13:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 10 楼』:  

asbai的原创作品,咱论坛里的某位牛人。 baiy.cn/ 由于sed我不怎么熟悉,所以我感觉wfr还是蛮好用的。




山外有山,人外有人;低调做人,努力做事。 进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-29 13:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 11 楼』:  

楼主的要求 tr 再好不过了。。 tr -d '\r\n'<test.txt>temp.txt && mv temp.txt test.txt


2008-4-29 13:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 12 楼』:  

Originally posted by pooronce at 2008-4-29 01:42 PM: 不管它用什么原理的吧,只要能减少硬盘io和用户操作步骤就OK了 plp,这个wfr是哪里找到的啊,gg了一下没找到说明啥的。cygwin包里也没有的。 它是哪个系统下拿过来的?
gg是什么意思?




山外有山,人外有人;低调做人,努力做事。 进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-29 13:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 13 楼』:  

google


2008-4-29 14:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 14 楼』:  

Originally posted by bjsh at 2008-4-29 01:52 PM: 楼主的要求 tr 再好不过了。。 tr -d '\r\n'<test.txt>temp.txt && mv temp.txt test.txt
这也是附加的文件改名改回啊 另,我那个要求是,删掉末尾的那个换行符(多余的),不是指每行最后一个。


2008-4-29 14:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 15 楼』:  

Originally posted by plp626 at 2008-4-29 01:51 PM: asbai的原创作品,咱论坛里的某位牛人。 baiy.cn/ 由于sed我不怎么熟悉,所以我感觉wfr还是蛮好用的。
谢谢推荐,工具很强悍 ……可惜的是好像是只支持win32或dos环境


2008-4-29 14:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<<   [1] [2]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: