使用bash正则表达式

时间:2015-06-18 14:28:54

标签: regex bash

我有一个这样的字符串:

zone "example.com" {
    type slave;
    file "db.example.com";
    masters { x.x.x.x; };
};

zone "foo.com" {
    type slave;
    file "db.foo.com";
    masters { x.x.x.x; };
};

...

我想删除特定区域。

我知道如果我有正则表达式后如何删除它:

sudo sed -i '$REGEX' /file/path

但我不太确定正则表达式本身。我知道开头是(zone "example.com" {),结尾会是(};\s};),但我如何在两者之间加入内容?

3 个答案:

答案 0 :(得分:4)

sed -i '/example\.com/,/^$/d' filename

这将删除从包含“example.com”的第一行开始并以空行结束的范围内的行。

答案 1 :(得分:2)

你可以在sed中做这样的事情

{{1}}

答案 2 :(得分:0)

使用awk你可以使用空记录分隔符来处理这个问题,即awk -v name='example.com' -v RS= '!($0 ~ name)' zones zone "foo.com" { type slave; file "db.foo.com"; masters { x.x.x.x; }; };

template<template<class...>class Z, class...T0s>
struct partial_apply {
  template<class...T1s>
  using result = Z<T0s...,T1s...>;
};
template<template<class...>class A, template<class...>class B>
struct same_template : std::false_type {};
template<template<class...>class A>
struct same_template<A,A> : std::true_type {};

template<class...>class Default {};
template<
  template<class...>class AllocatorType=Default
>
class MemoryArena {
  template<class T>
  using MyAllocatorTemplate = std::conditional_t<
    same_template<AllocatorType, Default>{},
    DefaultAllocType<MemoryArena, T>,
    AllocatorType<T>
  >;
};