linux中sed配合 grep,grep与cat、sed的结合

2023-05-16

grep查找命令

grep命令是linux系统中,最常用的文件字符串查找命令,职业生涯中,我们几乎离不开它。

下面是它最简单的用法,不过实际情况下,我们通常会添加很多参数或结合其他的命令去进行使用。

1grep ""

常用命令参数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14: 文件名称,多个文件使用空格隔开

: 匹配字符

-n : 显示行号

-i : 忽略字符大小写

-l : 列出符合条件的文件名

-r : 查找所有子目录

-w : 只显示整行全匹配

-o : 只显示匹配的关键字部分

-A : 关键字所在行、以及之后num行

-B : 关键字所在行、以及之前num行

-C : 关键字所在行、以及前后num行

–include="*.txt": 仅查找指定后缀的文件

> file: 将查询结果保存到文件中

>> file: 将查询结果追加到文件中

如,查询哪些文件中包含“ok”:

1grep "ok" -r -l --include="*" ./

grep和cat/tail的结合

通过grep和cat/tail的结合,我们可以轻易的实现返回文件中的关键字所在行、以及附近指定行的内容,尤其是在我们查询程序日志的时候,用的非常多。

语法:

1

2

3cat | grep

tail -f | grep

参数说明:

1

2

3:文件名称,多个文件使用空格隔开

:匹配字符

:grep命令参数

cat结合示例:在文件default.log中查找“异常”,并收集前后10行记录

1cat default.log | grep "异常" -C 10

tail结合示例:在文件default.log中查找“异常”,并进行实时收集

1tail -f default.log | grep "异常"

grep和sed的结合

sed命令是用来编辑一个或多个文件、简化对文件反复操作的神器,它和grep的结合令我们的文件操作起来更加的得心应手。

我们下面就来看看,它能给我们带来怎样的体验。

sed语法介绍:

1sed

常用命令参数:

1

2-i: 直接修改配合的文件内容

-e: 不修改原文件,仅输出,通常可以和“>或>>”命令结合,输出到新文件中

常用动作说明:

1

2

3

4

5s: 替换字符,替换指定的字符串,如:sed -i 's/匹配字符/新字符/g' a.txt,末尾的/g表示替换所有匹配的字符

a: 新增行,在指定行或指定范围的行的下一行新增内容,如: sed -i '2a\bbb' a.txt

i: 新增行,在指定行或指定范围的行的上一行新增内容,如: sed -i '2i\bbb' a.txt

c: 替换行,替换指定行或指定范围的行的内容,如:sed -i '3,5c\replacestr' a.txt

d: 删除行,删除指定行或指定范围的行,如: sed -i '3d' a.txt

注: 动作前面的数字表示第几号,或者几行到几行

扩展案例:

查找某个文件中的关键字,并在其下新增一行数据

1sed -i '/关键字/a\新增的一行数据' a.txt

grep与sed命令结合的示例:

上面我们已经了解sed命令的特性,那我们现在就试试,它和grep命令的结合,究竟能撞出怎样的火花?

下面的命令实现的是:将某个目录以及子目录的所有文件中的关键字“ok”统一替换为“yes”

1sed -i 's/ok/yes/g' `grep "ok" -r -l --include="*" ./`

上面 `` 括起来的grep命令,表示将grep命令查询的结果作为操作文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux中sed配合 grep,grep与cat、sed的结合 的相关文章

  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 对重复的名称添加双引号

    我想从文件中找到重复的名称 如下所示 并用 标记它们 file James Miki 123 456 7890 Wang Tai 234 563 6879 James Miki 123 456 7890 输出希望看起来像 James Mik
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 我不明白 execlp() 在 Linux 中如何工作

    过去两天我一直在试图理解execlp 系统调用 但我还在这里 让我直奔主题 The man pageexeclp 将系统调用声明为int execlp const char file const char arg 与描述 execl exe
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • 如何查询X11显示分辨率?

    这似乎是一个简单的问题 但我找不到答案 如何查询 通过 X11 存在哪些监视器及其分辨率 查看显示宏 http tronche com gui x xlib display display macros html and 屏幕宏 http
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 为什么我可以在 /proc/pid/maps 输出中看到几个相同的段?

    测试在32位Linux上进行 代码如下 int foo int a int b int c a b return c int main int e 0 int d foo 1 2 printf d n d scanf d e return
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • 如何将查找和替换限制为 CSV 中的一列?

    我有一个 4 列 CSV 文件 例如 0001 fish animal eats worms I use sed对文件进行查找和替换 但我需要将此查找和替换限制为仅在第 3 列中找到的文本 如何让查找和替换仅发生在这一列上 您确定要使用se
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed

随机推荐