1. 概述

  1. 在多个文件中 查找内容

2. 想干啥

  1. 目的

    1. 在 多个文件 中, 查找内容
  2. 准备

    1. 之前在 单个文件里 查找过内容

      1. 工具

        1. awk

          1. 前提

            1. 文件有固定格式
            2. 查找时有字段的要求
          2. 例子

            # print $0 就一句话, 所以 不要 {} 也可以
            > awk '{if($0 ~ <patter>){print $0}}' <fileName>
        2. grep
          1. 前提

            1. 这个要求没那么多
          2. 例子

            > cat <fileName> | grep <pattern>
  3. 例子

    1. 要求

      1. 查找多个文件里, 含有 1 的行
      2. 并知道是哪个文件里的
    2. 文件

      # 得到 1 2 3 三个文件, 每个文件的内容, 是 1 到 10
      > seq 1 10 > 1
      > seq 1 10 > 2
      > seq 1 10 > 3
      # 可以用 循环写, 也不难对吧
      > for i in {1..3};do seq 1 10 > ${i};done

2. 思路1: cat | grep

  1. 命令

    > cat * | grep '1'
  2. 结果

    1. 输出

      1
      10
      1
      10
      1
      10
    2. 感觉不行

      1. 找到了 1
      2. 但是不知道内容分布在 哪个文件里

3. 思路2: find | xargs grep

  1. 命令

    # 不理解 find 的同学, 可以用 ls 代替
    # 我就不怎么理解
    # -name 支持 通配符, 我的目录下只有三个文件, 所以也可以不带
    > find . -type f -name "*" | xargs grep "1"
  2. 结果

    1. 输出

      1:1
      1:10
      2:1
      2:10
      3:1
      3:10
    2. 这次还行

      1. 带了文件名了, 哈哈

        1. 搞定

4. 思路

  1. 思路

    1. find

      1. find

        1. 找到 特定文件
        2. 将 文件名, 传递给 grep
      2. grep
        1. 获取多个 文件名
        2. 挨个文件查找内容
        3. 找到的话, 就显示出来
    2. cat

      1. cat

        1. 将所有文件的内容, 放入流
        2. 将流传给 grep
      2. grep
        1. 收到一个流

          1. 文件名已经丢失了
        2. 查找内容
          1. 所以只能找到内容
  2. 区别

    1. grep 可以接受不同的东西

      1. 参数

        1. 收到参数后, 去找文件
        1. 收到流后, 直接在流里面找
        2. 所以文件名丢了
    2. 疑问1: 为啥跟了 xargs 的 grep 就自带行号, 而 跟了 cat 的就没有?

      1. grep 后面跟了多个文件名, 就会自己带

        1. 单个文件 或者 流 的时候就不带

ps

  1. ref

    1. Linux上批量查找文件里面带的关键字(grep 关键字的用法)

Linux - Shell - 在多个文件中查找关键字的更多相关文章

  1. linux所有文件中查找关键字的命令

     grep 192.168.1.1 * -r    在所有文件中查找192.168.1.1

  2. Linux系统下,在文件中查找某个字符串

    在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的" ...

  3. Linux平台从文件中查找字符赋值于变量

    以telnet方式登录Linux主机,在默认目录下用命令创建一个包含DUT wanIP的文本文件.[root] echo wanIP=88.0.100.253 > ./wanIP.txt在默认目 ...

  4. 在文件夹下所有文件中查找字符串(linux/windows)

    在linux下可以用 grep "String" filename.txt#字符串 文件名grep -r "String" /home/#递归查找目录下所有文件 ...

  5. Linux 在文件中查找某字符串

    命令: grep 'word' filename 在多个文件中查找: grep 'word' file1 file2 file3 更多用法参考:https://www.howtoforge.com/t ...

  6. Linux 在文件夹的所有文件中查找某字符

    命令: grep -r -e string directory eg: 在 /home 目录下的所有文件中查找包含 test 字符串的文件. grep -r -e "test" / ...

  7. linux shell 字符串操作(长度,查找,替换)详解

    linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...

  8. linux日志中查找关键字、前几行、结尾几行,Linux的find用法示例

    linux在日志中查找关键字.前几行.结尾几行,Linux的find用法示例 1.linux在日志中查找关键字.前几行.结尾几行 1.1查看日志 前 n行: 1.2查看日志 尾 n行: 1.3根据 关 ...

  9. 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)

    说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...

随机推荐

  1. SQLserver还原提示正在还原中。解决方法

    今天在Sqlerver还原数据库时一直就卡在那里提示“正在还原…”的状态,此时无法操作数据库,下面我来给大家介绍解决些问题的方法 解决方法: RESTORE DATABASE demo FROM DI ...

  2. localStorage存、取数组

    localStorage存储数组时需要先使用JSON.stringify()转成字符串,取的时候再字符串转数组JSON.parse(). var arr=[1,2,3,4]; localStorage ...

  3. opensuse安装pycharm

    最近在学习python,所以查询了很多资料,大多都推荐pycharm进行pychon项目开发.于是查阅一些资料,整理出这个安装步骤.(仅供参考!!!仅供参考!!!仅供参考!!!) 仅供参考!!!仅供参 ...

  4. php设计模式之装饰模式实例代码

    <?php header("Content-type:text/html;charset=utf-8"); /** * 文章编辑类 */ class Article { pr ...

  5. Linux - Shell - 免密码登录

    概述 简述 linux ssh 无密码登录 无能狂怒 最近真是不知道写啥了 环境 os centos7 1. 场景 场景 主机A 需要经常访问 主机B 每次访问, 都要输入一次 密码 问题 每次都输密 ...

  6. 【PAT甲级】1116 Come on! Let's C (20分)

    题意: 输入一个正整数N(<=10000),接着依次输入N个学生的ID.输入一个正整数Q,接着询问Q次,每次输入一个学生的ID,如果这个学生的ID不出现在之前的排行榜上输出Are you kid ...

  7. ORA-00904: "I_LEVEL": invalid identifier

    问题描述 ORA-00904: "I_LEVEL": invalid identifier 标示符无效

  8. python3 yield实现假的多并发

    import time def fun1(): while True: print("fun1") time.sleep(0.1) yield def fun2(): while ...

  9. C++ 跨dll传递string类型参数执行出错问题

    今天遇到一个问题,在一个dll工程中定义了一个返回值为string,参数为string的函数,然后在一个测试工程中调用,Release模式下一切正常Debug模式下整个函数的执行到return之前都毫 ...

  10. spring自动装配和通过java实现装配

    1.组建扫描 在类上添加注解@Component注解可以实现组建扫描 @Component public class A{ ... } 2.自动装配 通过在属性上或者方法上添加@Autowired注解 ...