linux - 搜索字符串的组合和模式

标签 linux bash awk sed grep

需要部分 bash 脚本的帮助,它需要找到特定的模式字符串。下面给出了一个示例字符串:

//*-----------
//* %%SET %%ABC     = %%BLANK
//* %%SET %%RESTART = %%BLANK7
//* %%SET %%DANGO= 236985
//*-----------
//* %%IF %%ODATE EQ 123456
//* %%SET %%ABC=   GSG34
//* %%SET %%RESTART = RESTART
//* %%ENDIF
//*-----------
//* %%IF %%ODATE EQ 463123
//* %%SET %%DANGO= 236985
//* %%ENDIF
//*-----------
//* %%IF %%ODATE EQ 15641
//* %%SET %%RESTART = %%BLANK7
//* %%ENDIF
//*-----------
  • 我需要在 IF 和 ENDIF 条件下找到 ODATE、ABC、RESTART 的组合
  • 我特别需要在 IF 和 ENDIF 之间进行检查。它还应检查 IF 和 ENDIF 之间存在三个参数 ODATE、ABC 和 RESTART 的条件。如果满足条件,那么它应该打印那些。
  • 我尝试了以下命令

cat file | sed -n '/%%IF/,/%%ENDIF/p'

//* %%IF %%ODATE EQ 123456
//* %%SET %%ABC=   GSG34
//* %%SET %%RESTART = RESTART
//* %%ENDIF
//* %%IF %%ODATE EQ 463123
//* %%SET %%DANGO  = 236985
//* %%ENDIF
//* %%IF %%ODATE EQ 15641
//* %%SET %%RESTART = %%BLANK7
//* %%ENDIF

我只需要在下面找到:

//* %%IF %%ODATE EQ 123456
//* %%SET %%ABC=   GSG34
//* %%SET %%RESTART = RESTART
//* %%ENDIF

我怎样才能做到这一点?

最佳答案

使用 sed:

sed -n '/%%IF /{:a;N;/%%ENDIF/!ba;/ODATE/{/ABC/{/RESTART/p;}}}' file

关于linux - 搜索字符串的组合和模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45345817/

相关文章:

node.js - 使用 Bash 和 NPM 替换配置中的 env 失败

linux - 使用来自另一个目录的相对路径运行脚本

linux - bash 脚本 - 循环中的 2 个变量

linux - 在 awk 中应用多个正则表达式

linux - 获取 "source"编辑脚本的位置

linux - 使用查找删除一些文件

php - 使用外部 IP 访问 Linux vps 中的文件的最佳和最简单的方法是什么?

linux - 如何阻止推送到远程主分支

Bash:内存泄漏是否适用于 UNIX 中的 bash 脚本?

linux - 使用 CURL 检查重定向的 Bash 脚本