Chinaunix

标题: 如何在文件列表指定的所有文件中,抓取需要的包含关键词的文件? [打印本页]

作者: freedos520    时间: 2014-11-18 17:59
标题: 如何在文件列表指定的所有文件中,抓取需要的包含关键词的文件?
请教大家,问题如下:
有一个文件列表filelist,里面内容类似如下:

/boot/aaa.c
/boot/aab.c
/sbin/aca.c
/sbin/usr/dm.c
/boot/dev.c
/boot/device/monitor.c
/home/device/mst.c
/bin/device/userid.c

总之,就是文件列表文件filelist里面包含的内容不只在当前目录下,而且目录层级不固定。

现在要在filelist包含的文件列表的文件里面,找出包含“keyid”关键词的文件,请教该如何操作?
作者: Herowinter    时间: 2014-11-18 18:06
回复 1# freedos520

目测是这样:
  1. while read line;do grep -q "keyid" "$line"&&echo "$line";done<filelist
复制代码

作者: freedos520    时间: 2014-11-18 19:24
回复 2# Herowinter


    多谢回复,是把这段话放在一个可执行文件里面运行这个可执行文件吗?
还是直接输入这段代码?直接输入这段代码运行,结果显示:while:Expression Syntax。望明示,多谢指教。
作者: jason680    时间: 2014-11-18 19:42
本帖最后由 jason680 于 2014-11-18 19:46 编辑

回复 1# freedos520

1. output with keyword
  cat filelist | xargs grep keyid

2. output file name only
  for f in `cat filelist`
  do
     if grep -c keyid -q $f; then
        echo $f
     fi
  done

   
作者: freedos520    时间: 2014-11-18 19:54
回复 4# jason680


    多谢回复,使用的命令很简洁。我试试先。
作者: Herowinter    时间: 2014-11-18 20:01
回复 3# freedos520

filelist文件所在的目录命令行输入就可以,也可以放入一个shell脚本中。

   
作者: Herowinter    时间: 2014-11-18 20:02
回复 3# freedos520

filelist文件所在的目录命令行输入就可以,也可以放入一个shell脚本中。

   
作者: Herowinter    时间: 2014-11-18 20:03
提交的时候出bug了,呵呵。。。
作者: freedos520    时间: 2014-11-18 20:03
Herowinter 发表于 2014-11-18 20:01
回复 3# freedos520

filelist文件所在的目录命令行输入就可以,也可以放入一个shell脚本中。


我试了两个方法都不对。
作者: Herowinter    时间: 2014-11-18 20:07
回复 9# freedos520

4楼的可以吗?你什么shell?
   
作者: freedos520    时间: 2014-11-18 20:15
Herowinter 发表于 2014-11-18 20:07
回复 9# freedos520

4楼的可以吗?你什么shell?


我的文件列表里面有变量,我处理一下再试试。

我的shell版本是csh。
作者: Herowinter    时间: 2014-11-18 20:42
回复 11# freedos520

csh这样写while循环肯定不对的,试试这样可以吗?

foreach line(`cat filelist`);grep -q "keyid" "$line"&&echo "$line";end
作者: freedos520    时间: 2014-11-20 11:30
Herowinter 发表于 2014-11-18 20:42
回复 11# freedos520

csh这样写while循环肯定不对的,试试这样可以吗?


对不起,有事回复晚了。

这样也不行,报语法错误:Syntax error near unexpected token `('。

作者: freedos520    时间: 2014-11-20 11:38
jason680 发表于 2014-11-18 19:42
回复 1# freedos520

1. output with keyword



多谢@jason680 ,两种方法都试过了,都没有任何结果。
作者: freedos520    时间: 2014-11-20 14:03
本帖最后由 freedos520 于 2014-11-20 14:04 编辑

目前没有一个可用的能实现功能的脚本或者代码,看来大家都没遇到过这个问题啊?
作者: jason680    时间: 2014-11-20 14:30
回复 15# freedos520

>>目前没有一个可用的能实现功能的脚本或者代码,看来大家都没遇到过这个问题啊?
   
没遇到问题

$ cat filelist
/tmp/boot/aaa.c
/tmp/boot/aab.c

$ ls /tmp/boot/
aaa.c  aab.c

$ cat filelist | xargs grep -n .
/tmp/boot/aaa.c:1:abc
/tmp/boot/aaa.c:2:keyid
/tmp/boot/aaa.c:3:xyz
/tmp/boot/aab.c:1:123

$ cat filelist | xargs grep keyid
/tmp/boot/aaa.c:keyid

作者: achangmm    时间: 2014-11-20 14:54
楼主试试下面的,把内容复制到一个脚本里面,执行这个脚本
cat filelist|while read i
do
v_result=`grep "keyid" $i|wc -l`
if [ $v_result -ge 1 ]
then
echo $i
fi
done
作者: rulebook    时间: 2014-11-20 15:07
  1. awk -F"/" 'BEGIN{IGNORECASE=1}$NF~/keyid/{print $0}' oo
复制代码

作者: futianshi1314    时间: 2014-11-21 02:14
本帖最后由 futianshi1314 于 2014-11-21 02:21 编辑

回复 15# freedos520


  cat list |  xargs grep -ri “关键字” -l   很简单的,手机上的,你要是还不会的话我明天上班给你写吧


作者: futianshi1314    时间: 2014-11-21 02:24
本帖最后由 futianshi1314 于 2014-11-21 10:55 编辑

回复 15# freedos520

作者: freedos520    时间: 2014-11-25 19:54
futianshi1314 发表于 2014-11-21 02:14
回复 15# freedos520


兄弟,你这脚本找不出关键词的,只是把文件列表的文件全部列了出来。
作者: futianshi1314    时间: 2014-11-27 17:49
回复 21# freedos520

现在要在filelist包含的文件列表的文件里面,找出包含“keyid”关键词的文件,请教该如何操作?       这不是你的需求吗?  你不就是要含有关键字的文件列表吗??????都给你列出来了 你还要啥需求?

   
作者: freedos520    时间: 2014-11-28 10:21
futianshi1314 发表于 2014-11-27 17:49
回复 21# freedos520

现在要在filelist包含的文件列表的文件里面,找出包含“keyid”关键词的文件,请教 ...


我运行脚本只显示filelist文件列表里面的文件,并没有找出含“keyid”关键词的文件。
作者: freedos520    时间: 2014-11-28 11:26
多谢各位,解决了。是我的filelist的文件路径不规范,含义一些变量。
作者: Looiml    时间: 2014-11-28 11:35
本帖最后由 Looiml 于 2014-11-28 11:38 编辑

回复 1# freedos520
  1. cat filelist|xargs grep -l keyid
复制代码

作者: skypeGNU    时间: 2014-11-30 23:12
  1. #!/bin/bash

  2. while read line ; do
  3.         if [[ -z "$line" ]]; then
  4.                 continue
  5.         fi
  6.         grep -l 'keyid' "$line"

  7. done < 1.txt
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2