【问题标题】:print a paragraph that contains more than 2 patterns using awk or sed使用 awk 或 sed 打印包含 2 个以上模式的段落
【发布时间】:2016-07-28 19:05:37
【问题描述】:

我只想打印以“select”开头并以“;”结尾的段落,但如果我有以下代码,则应包含“IN cccc”

select aaaa
bbbb
IN cccc
;
select dddd
eeeee
IN ffff
;
select rrrr
eeeee
IN cccc
;

结果会是这样的

select aaaa
bbbb
IN cccc
;
select rrrr
eeeee
IN cccc
;

这是我使用的 awk awk '/^select*/,/^;/{if ($0 ~ /^IN cccc/) ; print}' inputfile 但我得到了我文件的全部内容

【问题讨论】:

  • @fedorqui 我使用了以下 awk 但似乎我缺少一些东西 "awk '/^select*/,/^;/{if ($0 ~ /^IN cccc/) ; print} ' 输入文件
  • 您的问题是分号放置错误。你的意思是if ($0 ~ /^IN cccc/) { print }; 当然,解决这个问题并不足以实现你想要做的事情。

标签: awk sed


【解决方案1】:

你可以试试这个awk:

awk 'BEGIN{ORS=RS=";"} /^[[:space:]]*select.*IN cccc/' file

这里,

  • ORS - 输出记录分隔符
  • RS - 输入记录分隔符

【讨论】:

  • 注意:\s 特定于 GNU awk。如果您使用 nawk 或 mawk,请使用 [[:space:]]
  • 这将错误地打印包含selection RUIN cccc 的记录。 idk 是否会发生这种情况,或者如果发生这种情况没关系 - 如果有问题,请在您关心的单词周围添加单词边界(GNU awk)或空格或换行符或其他内容....
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多