设为首页 收藏本站
查看: 1109|回复: 0

shell整理(33)====改变文本内容的小题目

[复制链接]

尚未签到

发表于 2018-8-20 10:52:53 | 显示全部楼层 |阅读模式
  题目:linux系统中/tmp目录下有许多级子目录和文件。请编写一个程序(shell/perl/python或者任何其他语言)查找通配符log.201710*的文件,并将文件中的任何小写abc字母替换成大写ABC,生成文件保存在源目录的log.new.201710*文件中。
  
  根据题目自己创造条件
  例如我的环境:我的/tmp/下有俩目录,一个000,一个111
DSC0000.png

  看我创建的文件,我的文件中除了000中的log.201710111和111中的og.201710111有内容其他都是空的。
  [root@localhost 000]# ls
  log.201710111  log.201710222  log.201710333  log.201712333  log.201715333
  [root@localhost 000]#
  ot@localhost 111]# ls
  log.201710111  log.201710222  log.201715111
  [root@localhost 111]#
  例如:
  [root@localhost 111]# cat log.201710111
  aaaaaaaaa
  bbbbbbbbbb
  cccccccccc
  dddddddddd
  eeeeeeee
  [root@localhost 111]#
  [root@localhost 000]# cat log.201710111
  a
  b
  c
  aaaaaaaaaaaaa
  bnbbbbbbbbbbbb
  dsfsagsagr
  fsdf
  [root@localhost 000]#
DSC0001.png

  shell代码如下:
#!/bin/bash  

  
a=`find /tmp/ -type f -name 'log.201710*'`
  
echo "$a" | while read line
  
do
  
c=`echo $line |awk -F '[/]+' '{print $3 }'`
  
e=`echo $line |awk -F '[/.]+' '{print $5 }'`
  
b=`cat $line | grep '[abc]'`
  
if [ ! -z "$b" ];then
  
#echo $line |sed 's/abc/ABC/g'  >>/tmp/$c/log.new.$e
  
cat $line | tr 'abc' 'ABC' >/tmp/$c/log.new.$e
  
fi
  
done
  虽然只有简单的几行代码,但是有一些细节问题。例如if那$b 必须用双引号引起来,因为如果不加就会
DSC0002.png

  就会报错,因为这个变量有回车,所以必须加双引号,如果你不想犯错,所有的变量尽量都加双引号
  细节2:sed 和 tr 的用法是不一样的,有没有发现一个用的追加,一个用的覆盖。
  细节3:第二行,a 必须用双引号引起来,变量没有在一行
  细节4:第六行,grep 'abc' 表示连续的abc字符串,而grep '[abc]'表示括号中的任意一个。
  例如:
  [root@localhost 000]# cat log.201710111
  a
  b
  c
  abc
  abckjawdfalfd
  a jskd bnsdjkadc
  aaaaaaaaaaaaa
  bnbbbbbbbbbbbb
  dsfsagsagr
  fsdf
  [root@localhost 000]#
  oot@localhost 000]# grep 'abc' log.201710111
  abc
  abckjawdfalfd
  [root@localhost 000]#
  [root@localhost 000]# grep '[abc]' log.201710111
  a
  b
  c
  abc
  abckjawdfalfd
  a jskd bnsdjkadc
  aaaaaaaaaaaaa
  bnbbbbbbbbbbbb
  dsfsagsagr
  [root@localhost 000]#
  执行结果如下:
DSC0003.png

  [root@localhost 111]# cat log.new.201710111
  AAAAAAAAA
  BBBBBBBBBB
  CCCCCCCCCC
  dddddddddd
  eeeeeeee
  [root@localhost 111]#
  [root@localhost 000]# cat log.new.201710111
  A
  B
  C
  AAAAAAAAAAAAA
  BnBBBBBBBBBBBB
  dsfsAgsAgr
  fsdf
  [root@localhost 000]#
  如果我们把这个题目改一改
  题目:linux系统中/tmp目录下有许多级子目录和文件。请编写一个程序(shell/perl/python或者任何其他语言)查找通配符log.201710*的文件,并将文件中的任何"abc"字符串换成大写“ABC”,生成文件保存在源目录的log.new.201710*文件中。
  shell脚本如下:
#!/bin/bash  
for i in `find /tmp -type f -name "log.201710*"`
  
do
  
        str=`grep 'abc' $i`
  
        if [ ! -z "$str" ];then
  
                sed 's/abc/ABC/g' $i >`dirname $i`/log.new.`echo $i |awk -F'.' '{print $NF}'`
  
        fi
  
done
  
~
  linux dirname 命令:
  用法: dirname filename
  功能:从给定的包含绝对路径的文件名中,去除文件名(非目录部分),留下目录部分。
  例如:
  [root@localhost /]# dirname /etc/passwd
  /etc
  [root@localhost /]#



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554199-1-1.html 上篇帖子: shell中case的讲解及实例 下篇帖子: 如何通过shell脚本统计apache使用多少内存
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表