linux - Grep 文本的特定部分

标签 linux bash shell

我有这样一段文字:

ora.sas.aa.svc
      1        ONLINE  ONLINE       sas1                                         
ora.sas.bb.svc
      1        ONLINE  ONLINE       sas2                                         
ora.sas.cc.svc
      1        ONLINE  ONLINE       sas2                                         
ora.sas.dd.svc
      1        ONLINE  ONLINE       sas1                                         
ora.sas.ee.svc
      1        ONLINE  ONLINE       sas1                                         
      2        ONLINE  ONLINE       sas2  

我想要的是 grep 此 .svc 的特定部分和在线状态,例如:

example.txt |grep aa
  ora.sas.aa.svc
          1        ONLINE  ONLINE       sas1     

example.txt |grep ee
 ora.sas.ee.svc
      1        ONLINE  ONLINE       sas1                                         
      2        ONLINE  ONLINE       sas2  

“在线”的行号可能会改变,所以我不能用 grep -A2grep -A3 进行 grep。

最佳答案

您可以改用 awk:

awk -v s='ee' 'NF==1 && $0 ~ s{p=1} NF==1 && !($0 ~ s){p=0} p' file
ora.sas.ee.svc
      1        ONLINE  ONLINE       sas1
      2        ONLINE  ONLINE       sas2

awk -v s='aa' 'NF==1 && $0 ~ s{p=1} NF==1 && !($0 ~ s){p=0} p' file
ora.sas.aa.svc
      1        ONLINE  ONLINE       sas1

关于linux - Grep 文本的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23222389/

相关文章:

bash - 删除行尾并且没有新段落

html - 不以任何方式修改 HTML 的命令行 HTML 格式化程序,只是缩进?

mysql - 在 Bash 中声明变量?

c++ - Linux - 确保专门为关键任务保留一个核心

java - Runtime.getRuntime().exec 奇怪的行为

linux - 如何添加可以从CMD行运行的程序?

linux - 从 curl 命令在 shell 脚本中获取正确的输出

ruby - 当 shell 环境不存在时,如何使用 RVM 从特定的 Ruby 版本运行 "bundle exec"

linux - 如何在 telnet 客户端上实现命令历史记录? (向上/向下箭头)

linux - 如何在 CSV 中获取一行的散列并将其添加为最后一列