免费注册 查看新帖 |

Chinaunix

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

[文本处理] 新手学习shell几天,碰到一个相当棘手的问题,求大家帮忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-04 12:55 |只看该作者 |倒序浏览
大致描述下,比如有一个目录,目录名为root,在这个目录下有一个文本文件a.txt,还有一个子目录名为branch,在这个子目录下有个文本文件b.txt。
a.txt的文本内容如下:
the show in There is another
wo like our school
THE tHe THEthe is tHere

b.txt的文本内容可以和a.txt内容一样。

要求是将文本中 root目录下包含子目录的文件 中的 单词 the(不管t,h,e哪个字母大小写)都换成The  (T大写,h,e小写),但是像there another 中这种只包含the这三个字母的单词  不改变    ,也就是仅仅限于 the单词。输出的结果要求是:
显示 第几行修改了 并且修改了几次    即  line 1 ;1  line3 ;2 (分行显示)。这说明第一行修改了 并修改了一次,第三行修改了 并修改了两次。
谢谢大家了!

论坛徽章:
0
2 [报告]
发表于 2013-06-04 13:01 |只看该作者
或者有大家什么好的思路也可以说出来,好给我参考学习下。

论坛徽章:
0
3 [报告]
发表于 2013-06-04 13:36 |只看该作者
本帖最后由 心若寒江雪 于 2013-06-04 13:37 编辑

find ./ -type f | xargs sed -i 's/\b[t|T][h|H][e|E]\b/The/g'

论坛徽章:
0
4 [报告]
发表于 2013-06-04 13:47 |只看该作者
显示修改的结果
  1. find root -type f -exec awk '{print FILENAME,"line" NR " ;"gsub(/\<the\>/,"")}' {} \;
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-06-04 13:48 |只看该作者
做实际的修改
  1. find root -type f -exec sed -i 's/\bthe\b/\u&/g' {} \;
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-06-04 13:54 |只看该作者
本帖最后由 心若寒江雪 于 2013-06-04 13:54 编辑

lz说大小写的都要改
回复 5# kk5234


   

论坛徽章:
0
7 [报告]
发表于 2013-06-04 14:34 |只看该作者
本帖最后由 kk5234 于 2013-06-04 14:41 编辑

回复 6# 心若寒江雪

好像是啊,没看仔细,改一改。
  1. find root -type f -exec awk '{print FILENAME,"line" NR " ;"gsub(/\<[tT][hH][eE]\>/,"")}' {} \;
复制代码
  1. find root -type f -exec sed -i 's/\b[tT][hH][eE]\b/The/g' {} \;
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-06-04 15:59 |只看该作者
回复 7# kk5234
你好 为什么我执行后的结果是:
./a.txt line1 ;0
./a.txt line2 ;0
./branch/b.txt line1 ;0
./branch/b.txt line2 ;0
分号后面都是0   
执行第二段代码也出现了
".//a.txt": invalid command code .的错误
能麻烦你看下吗


   

论坛徽章:
0
9 [报告]
发表于 2013-06-04 16:41 |只看该作者
可以了
# find /tmp/bdir/ -type f -exec awk '{print FILENAME,"line" NR ";" gsub(/\<[tT][hH][eE]\>/,The)}' {} \;
/tmp/bdir/b.txt line1;1
/tmp/bdir/b.txt line2;0
/tmp/bdir/b.txt line3;2
/tmp/bdir/b.txt line4;0

论坛徽章:
0
10 [报告]
发表于 2013-06-04 16:46 |只看该作者
显示加修改
# find /tmp/bdir/ -type f -exec awk '{print FILENAME,"line" NR ";" gsub(/\<[tT][hH][eE]\>/,The)}' {} \; -exec sed -i 's/\b[tT][hH][eE]\b/The/g' {} \;
/tmp/bdir/b.txt line1;1
/tmp/bdir/b.txt line2;0
/tmp/bdir/b.txt line3;2
/tmp/bdir/b.txt line4;0
[root@Cnyunwei tmp]# cat bdir/b.txt
The show in There is another
wo like our school
The The THEthe is tHere
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP