2016-10-26 1 views
-2

У меня есть эти строки, что каждая строка начинается с слова, равного и нескольких предложений, поэтому мне нравится выбирать каждый раздел. Например:Как выбрать раздел в регулярном выражении в командах linux

 delete = \account 
      user\ 
      admin 
      admin right is good. 
     add = \ 
      nothing 
      no out 
      input output is not good 
     edit = permission 
      bob 
      admin 
      alice killed bob!!! 

Я хочу, чтобы выбрать раздел, например:

add = \ 
     nothing 
     no out 
     input output is not good 

Мне нравится делать это с регулярным выражением.

ответ

0

Ваш вопрос немного расплывчато, но вы можете попробовать следующее ...

/\s*(\w+) = ([^=]*\n)*/m 

... при условии соблюдения требования, что последний раздел завершается с \ п.

это работает:

  • '\ S *' отвечавшие опережающих пропусков
  • '(\ W +)' захватывая название раздела
  • '=' соответствует пространству равны пространство сепаратор
  • «([^ =] * \ п)» тогда захватывает строку, которая не включает в себя равенства и заканчивается символом новой строки
  • «*», и это делает, что последний бит несколько раз

Затем необходимо установить флаг m для установки нескольких линий.

Смотрите следующие быстро увидеть группы, которые выводятся для каждого матча ...

https://regex101.com/r/oDKSy9/1

(. ПРИМЕЧАНИЕ: г флаг не будет, вероятно, потребуется в зависимости от того, как вы используете регулярное выражение)

+0

Спасибо. Можете ли вы написать это регулярное выражение с помощью команды sed? – user6920966

+0

Например, замените раздел добавления новым значением или удалите их. – user6920966

+0

Я нахожу это решение: sed ': a; N; $! Ba; s/\ (add = \ ([^ =] * \ n \) * \)/stringReplace/g' fileName – user6920966

0

Решение по OP.

Я считаю это решение:

csplit -k fileName '/.*=/' '{*}' 

Благодаря @haggisandchips