免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3451 | 回复: 12
打印 上一主题 下一主题

[文本处理] 批量文本处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-06 10:45 |只看该作者 |倒序浏览
一个文件夹下面有很多文件,我想把所有文件中的某个字符串替换成另外一个字符串,麻烦大家提供一个shell脚本
如果能够提供一个windows脚本就更好的。

论坛徽章:
0
2 [报告]
发表于 2012-08-06 11:16 |只看该作者
  1. find path -type f -exec sed -i 's/AAA/BBB/g' {} \;
复制代码
根据实际情况再修改下

论坛徽章:
0
3 [报告]
发表于 2012-08-06 18:26 |只看该作者
学习了。。。。。

论坛徽章:
0
4 [报告]
发表于 2012-08-06 23:32 |只看该作者

学习了。。。。。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2012-08-07 09:25 |只看该作者
sed不支持-i 参数的话,就用perl 替代。
  1. find path -type f -exec perl -i.bak -pe 's/AAA/BBB/g' {} \;
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-08-07 13:37 |只看该作者
有谁能提供一个dos脚本吗

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2012-08-07 13:39 |只看该作者
本帖最后由 seesea2517 于 2012-08-07 13:40 编辑

JS 版本
  1. function Main(fileName, findString, replaceString)
  2. {
  3.     var str, reg
  4.     var fso  = new ActiveXObject("Scripting.FileSystemObject")
  5.     var file = fso.OpenTextFile(fileName, 1)
  6.     str = file.ReadAll()

  7.     reg = new RegExp(findString, "g")
  8.     return str.replace(reg, replaceString)
  9. }

  10. WScript.Echo(Main(WScript.Arguments(0), WScript.Arguments(1), WScript.Arguments(2)))
复制代码
VBS 版本
  1. Function Main(fileName, findString, replaceString)
  2.     Dim str
  3.     Set fso  = CreateObject("Scripting.FileSystemObject")
  4.     Set file = fso.OpenTextFile(fileName, 1)

  5.     str = file.ReadAll
  6.     Main = Replace(str, findString, replaceString)
  7. End Function

  8. WScript.Echo Main(Wscript.Arguments(0), Wscript.Arguments(1), Wscript.Arguments(2))
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
8 [报告]
发表于 2012-08-07 13:41 |只看该作者
本帖最后由 seesea2517 于 2012-08-07 13:44 编辑

呀,还有内容超长的问题,另起一个回复:

BAT 版本

  1. @ECHO OFF
  2. SETLOCAL EnableDelayedExpansion

  3. REM 文件
  4. SET FILE=%1
  5. SET FIND=%2
  6. SET REPLACE=%3
  7. SET CRLF=^


  8. REM 读文件
  9. FOR /F "usebackq delims=" %%l IN (`type %FILE%`) DO (
  10.     IF "!content!" == "" (
  11.         SET content=%%l
  12.     ) ELSE (
  13.         SET content=!content!!CRLF!%%l
  14.     )
  15. )

  16. REM 替换
  17. CALL :REPLACE %FIND% %REPLACE%

  18. ECHO !content!

  19. GOTO :EOF
  20. :REPLACE
  21.     SET content=!content:%1=%2!
  22. GOTO :EOF
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
9 [报告]
发表于 2012-08-07 13:41 |只看该作者
没有写使用说明,这里给调用示例,自己参考改为多文件循环以及输出重定向到文件:
  1. C:\Documents and Settings\SeeSea\桌面\测试>type 1.txt
  2. a
  3. bb
  4. c
  5. bb
  6. b
  7. d
  8. d
  9. C:\Documents and Settings\SeeSea\桌面\测试>Cscript /e:jscript /nologo replace_string.js 1.txt b xx
  10. a
  11. xxxx
  12. c
  13. xxxx
  14. xx
  15. d
  16. d

  17. C:\Documents and Settings\SeeSea\桌面\测试>Cscript /nologo replace_string.vbs 1.txt b xx
  18. a
  19. xxxx
  20. c
  21. xxxx
  22. xx
  23. d
  24. d

  25. C:\Documents and Settings\SeeSea\桌面\测试>replace_string.bat 1.txt b xx
  26. a
  27. xxxx
  28. c
  29. xxxx
  30. xx
  31. d
  32. d
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
10 [报告]
发表于 2012-08-07 13:45 |只看该作者
批处理的代码做了调整,不然发不出来,奇怪。。。

由此可见 linux 比 windows 方便多少呀。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP