本文共 2141 字,大约阅读时间需要 7 分钟。
当时我最先想到的是sed和awk因为这些单行命令确实很强悍
前言:
Version: 0.1Auther : 追马
QQ : 993182876Bug:
由于限制条件,不能使用管道和重定向,而且必须是命令行脚本,所以此命令行脚本存在bug
1、当前目录下不能存在目录,否则会报错
2、当然了,不能检索目录的话,也就实现不了对目录递归的功能了
那位大牛有更好的主意可以分享出来额!
实践之后才知道:
1、针对awk来实现,单引匹配行和文件名很容易,但是打印出关键字匹配行的行号有问题
[root@nginx ~]# pwd/root [root@nginx ~]# ls anaconda-ks.cfg install.log install.log.syslog test [root@nginx ~]# awk '/root/{print $0,FILENAME}' * #遍历当前目录下打印关键字匹配行和文件名 rootpw --iscrypted $1$cZww2NX0$w2U6fxAYpQqD.LWAl0cfY0 anaconda-ks.cfg Installing rootfiles-8.1-6.1.el6.noarch install.log root test [root@nginx ~]#
2、针对sed,但匹配行号很容易,但是打印出文件名有问题,貌似对应的行号也是有问题的(这个原因是因为sed是按照匹配关键字行号然后所有文件行号累计得出的结果,估计是*匹配模式的问题)
[root@nginx ~]# [root@nginx ~]# sed -n '/root/=' * # 匹配行输出行号9248290 [root@nginx ~]#
[root@nginx ~]# cat -n test
1
2 root
3 zhuima
[root@nginx ~]#
3、使用grep,可以打印出文件名:行号:行内容这样的模式,但这也不是我们需要的
[root@nginx ~]# grep -n 'root' * anaconda-ks.cfg:9:rootpw --iscrypted $1$cZww2NX0$w2U6fxAYpQqD.LWAl0cfY0 install.log:212:Installing rootfiles-8.1-6.1.el6.noarch test:2:root [root@nginx ~]#
[root@nginx ~]# cat -n test
1
2 root
3 zhuima
[root@nginx ~]#
4、再次查看awk,内置函数FNR是可以打印出匹配行行号的
[root@nginx ~]# awk '/root/{print FNR,FILENAME}' *9 anaconda-ks.cfg212 install.log2 test
5、格式化化输出结果
[root@nginx ~]# awk 'BEGIN{print "List your search result:\nNum\tFilename\n------------------------\n"}/root/{print FNR,"\t",FILENAME}END{print "----------END-----------"}' *
List your search result:
Num Filename------------------------9 anaconda-ks.cfg212 install.log2 test----------END----------- [root@nginx ~]#
网上有人的脚本可以参考下
来源: <>
#!/bin/sh FILENAMES=for i in `find/home/` do file $i |grep"text"if [ "$?"=="0" ];then { echo $i FILENAMES=$i cat $i |grep-n "html"| awk '{ print "'${FILENAMES}'" ,$0 }'>>/tmp/log.txt } fi done
FILENAMES是shell变量,而awk是Linux中独立于shell的一个工具。在awk中如果要解析shell变量,需要将变量拿到awk的作用域外面来,即先关闭awk的单引号,引用变量后再次打开。
echo $str | awk -F, '{print '$FILENAMES'}'后记:此类题目使用命令行来实现的话,确实有点费周折,使用脚本相对来说简单一点,而且如何命令行编写的话存在bug,因为*匹配模式的出现可能会出现误判的情况,萝卜白菜,各有所爱吧,能实现需求就好!针对shell多写多练多看才是王道!
本文转自lovelace521 51CTO博客,原文链接:http://blog.51cto.com/lovelace/1317102,如需转载请自行联系原作者