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

前端之家收集整理的这篇文章主要介绍了shell整理(33)====改变文本内容的小题目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@题目:linux系统中/tmp目录下有许多级子目录和文件。请编写一个程序(shell/perl/python或者任何其他语言)查找通配符log.201710*的文件,并将文件中的任何小写abc字母替换成大写ABC,生成文件保存在源目录的log.new.201710*文件中。

@H_403_0@

@H_403_0@根据题目自己创造条件

@H_403_0@例如我的环境:我的/tmp/下有俩目录,一个000,一个111

@H_403_0@

wKioL1nQlrrxwVZ_AAAy85R0u7w906.png-wh_50

@H_403_0@看我创建的文件,我的文件中除了000中的log.201710111和111中的og.201710111有内容其他都是空的。

@H_403_0@[root@localhost 000]# ls

@H_403_0@log.201710111 log.201710222 log.201710333 log.201712333 log.201715333

@H_403_0@[root@localhost 000]#

@H_403_0@ot@localhost 111]# ls

@H_403_0@log.201710111 log.201710222 log.201715111

@H_403_0@[root@localhost 111]#

@H_403_0@例如:

@H_403_0@[root@localhost 111]# cat log.201710111

@H_403_0@aaaaaaaaa

@H_403_0@bbbbbbbbbb

@H_403_0@cccccccccc

@H_403_0@dddddddddd

@H_403_0@eeeeeeee

@H_403_0@[root@localhost 111]#

@H_403_0@[root@localhost 000]# cat log.201710111

@H_403_0@a

@H_403_0@b

@H_403_0@c

@H_403_0@aaaaaaaaaaaaa

@H_403_0@bnbbbbbbbbbbbb

@H_403_0@dsfsagsagr

@H_403_0@fsdf

@H_403_0@[root@localhost 000]#

@H_403_0@

wKiom1nQmISwTvPTAACSBXUPUJM368.png-wh_50

@H_403_0@

@H_403_0@shell代码如下:

#!/bin/bash

a=`find/tmp/-typef-name'log.201710*'`
echo"$a"|whilereadline
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
@H_403_0@虽然只有简单的几行代码,但是有一些细节问题。例如if那$b 必须用双引号引起来,因为如果不加就会

@H_403_0@

wKioL1nQnJKhkGMmAACNI66qACs861.png-wh_50

@H_403_0@就会报错,因为这个变量有回车,所以必须加双引号,如果你不想犯错,所有的变量尽量都加双引号

@H_403_0@细节2:sed 和 tr 的用法是不一样的,有没有发现一个用的追加,一个用的覆盖。

@H_403_0@细节3:第二行,a 必须用双引号引起来,变量没有在一行

@H_403_0@细节4:第六行,grep 'abc' 表示连续的abc字符串,而grep '[abc]'表示括号中的任意一个。

@H_403_0@例如:

@H_403_0@[root@localhost 000]# cat log.201710111

@H_403_0@a

@H_403_0@b

@H_403_0@c

@H_403_0@abc

@H_403_0@abckjawdfalfd

@H_403_0@a jskd bnsdjkadc

@H_403_0@aaaaaaaaaaaaa

@H_403_0@bnbbbbbbbbbbbb

@H_403_0@dsfsagsagr

@H_403_0@fsdf

@H_403_0@[root@localhost 000]#

@H_403_0@oot@localhost 000]# grep 'abc' log.201710111

@H_403_0@abc

@H_403_0@abckjawdfalfd

@H_403_0@[root@localhost 000]#

@H_403_0@[root@localhost 000]# grep '[abc]' log.201710111

@H_403_0@a

@H_403_0@b

@H_403_0@c

@H_403_0@abc

@H_403_0@abckjawdfalfd

@H_403_0@a jskd bnsdjkadc

@H_403_0@aaaaaaaaaaaaa

@H_403_0@bnbbbbbbbbbbbb

@H_403_0@dsfsagsagr

@H_403_0@[root@localhost 000]#

@H_403_0@执行结果如下:

@H_403_0@

@H_403_0@

wKiom1nQmUvzafIzAACl1jorX2M340.png-wh_50

@H_403_0@[root@localhost 111]# cat log.new.201710111

@H_403_0@AAAAAAAAA

@H_403_0@BBBBBBBBBB

@H_403_0@CCCCCCCCCC

@H_403_0@dddddddddd

@H_403_0@eeeeeeee

@H_403_0@[root@localhost 111]#

@H_403_0@[root@localhost 000]# cat log.new.201710111

@H_403_0@A

@H_403_0@B

@H_403_0@C

@H_403_0@AAAAAAAAAAAAA

@H_403_0@BnBBBBBBBBBBBB

@H_403_0@dsfsAgsAgr

@H_403_0@fsdf

@H_403_0@[root@localhost 000]#

@H_403_0@如果我们把这个题目改一改

@H_403_0@题目:linux系统中/tmp目录下有许多级子目录和文件。请编写一个程序(shell/perl/python或者任何其他语言)查找通配符log.201710*的文件,并将文件中的任何"abc"字符串换成大写“ABC”,生成文件保存在源目录的log.new.201710*文件中。

@H_403_0@shell脚本如下:

#!/bin/bash
foriin`find/tmp-typef-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
~
@H_403_0@linux dirname 命令:

@H_403_0@用法: dirname filename

@H_403_0@功能:从给定的包含绝对路径文件名中,去除文件名(非目录部分),留下目录部分。

@H_403_0@例如:

@H_403_0@[root@localhost /]# dirname /etc/passwd

@H_403_0@/etc

@H_403_0@[root@localhost /]#

原文链接:https://www.f2er.com/bash/390305.html

猜你在找的Bash相关文章