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的结合 的相关文章

  • 使用 grep 和正则表达式来过滤匹配项

    我正在尝试将 grep 与 v 一起使用进行反向匹配 并使用 e 进行正则表达式 我无法正确理解语法 我正在尝试类似的东西 tail f logFile grep ve string one string two 如果我这样做它不会过滤 如
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 更新 Mac OS 10.7 的 grep

    我想将 Mac 上的 grep 更新到比 Mac OS 10 7 2 附带的 2 5 1 更新的版本 我的问题是 为 Mac 更新 grep 或任何类似程序 的最佳方法是什么 我可以使用 Fink 或 MacPorts 安装新版本并设置路径
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 如何在线程创建和退出时调用函数?

    include
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 如何从 ssh 配置文件中删除主机条目?

    文件的标准格式是 Host example HostName example com Port 2222 Host example2 Hostname two example com Host three example com Port
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐