小编Sir*_*hos的帖子

sed:如果匹配模式,则打印分隔的行块

我想用sed来匹配由分隔的行的块模式1 /模式2,然后执行操作仅在包含块(例如打印块)pattern3.

在下面的示例中,我正在寻找" 抓住我,如果可以的话 ",在由匹配{}的行分隔的所有块中(然后我想完整地打印匹配的块).

我尝试过的:

sed -n -e '/{/,/}/{1h;1!{$!{H;d};H;x;/catch me if you can/p}}'
Run Code Online (Sandbox Code Playgroud)

(想法是匹配由{}分隔的块,然后将每个块累积到保留空间;在每个块的末尾,交换保持空间并执行匹配以" 抓住我,如果可以的话 ").这不起作用,因为所有匹配的块一起被sed视为单个块,而不是单独处理每个块.

输入数据:

"block1": {
    "foo": "abcd",
    "bar": "catch me if you can",
    "aaa": "12345"
},
"block2": {
    "bbb": "24680",
    "bar": "blah",
    "foo": "argh",
    "ccc": "135"
},
"block3": {
    "ddd": "zzz"
},
"block4": {
    "foo": "xyz",
    "bar": "catch me if you can",
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

"block1": {
    "foo": "abcd",
    "bar": "catch me …
Run Code Online (Sandbox Code Playgroud)

bash awk sed

5
推荐指数
1
解决办法
484
查看次数

标签 统计

awk ×1

bash ×1

sed ×1