Как сопоставить строку и вывести строки в фигурных скобках {} из файла конфигурации - PullRequest
0 голосов
/ 22 июня 2019

Я хочу напечатать строки в { и } с назначить где "манго" в группах хостов

   object Host "os.google.com" {
    import "windows"
    address = "linux.google.com"
    groups = ["linux"]
    }

    object Host "mango.google.com" {
    import "windows"
    address = "mango.google.com"
    groups = ["linux"]

    assign where "mango" in Hostgroups
    }

Желаемый вывод:

    object Host "mango.google.com" {
    import "windows"
    address = "mango.google.com"
    groups = ["linux"]

    assign where "mango" in Hostgroups
    }

Ответы [ 3 ]

0 голосов
/ 23 июня 2019

Это может сработать для вас (GNU sed):

sed -n '/{/h;//!H;/}/{g;/assign where "mango" in Hostgroups/p}' file

Отключите автоматическую печать при помощи опции -n и соберите линии в области удержания между фигурными скобками.После закрывающей фигурной скобки замените ее содержимым области удержания и, если есть совпадение для assign where "mango" in Hostgroup, напечатайте ее.

0 голосов
/ 24 июня 2019

Предполагается, что } не отображается ни в каком другом контексте при вводе:

$ awk -v RS='}' '
    /assign where "mango" in Hostgroups/ {
        sub(/^[[:space:]]+\n/,"")
        print $0 RS
    }
' file
    object Host "mango.google.com" {
    import "windows"
    address = "mango.google.com"
    groups = ["linux"]

    assign where "mango" in Hostgroups
    }
0 голосов
/ 22 июня 2019

Попробуйте awk скрипт

script.awk

/{/,/}/ { #define record range from { to }
    if ($0 ~ "{") rec = $0; # if record opening reset rec variable with current line
    else rec = rec "\n" $0; # else accumulate the current line in rec
    if ($0 ~ /assign where "mango" in Hostgroups/) { # if found exit pattern in current line
        print rec; # print the rec
        exit;      # terminate
    }
}

Выполнения:

awk -f script.awk input.txt

Вывод:

object Host "mango.google.com" {
import "windows"
address = "mango.google.com"
groups = ["linux"]

assign where "mango" in Hostgroups
...