Как найти строку в файле. css и затем изменить коррелированный конфиг в следующих скобках - PullRequest
1 голос
/ 19 января 2020

Позвольте мне начать с того, что я только начинаю баловаться с sed, awk и regex.

Вот что мне нужно, чтобы помочь.

В Ubuntu, в /etc/alternative/gdm3.css У меня есть этот раздел конфигурации:

.login-dialog-banner {
  color: #d6d6d1; }

Мне нужно, чтобы он был

.login-dialog-banner{
color: rgba(255,255,255,1);
font-size: 14;
text-align: center;}

I я заблудился о том, как сначала найти .login-dialog-banner, а затем изменить данные в {data}

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Вы бы попробовали следующее:

sed '
/\.login-dialog-banner[[:blank:]]*{/{   ;# if the specified 1st line is found
    $!{ n                               ;# and the current line is not the last line, then print it and read the next line
        s/.*color:.*/color: rgba(255,255,255,1);\
font-size: 14;\
text-align: center;}/                   ;# if the next line contains "color:"
                                        ;# then replace the line with the specified lines
    }
}' /etc/alternative/gdm3.css
1 голос
/ 19 января 2020

Можете ли вы попробовать ниже sed согласно вашему требованию, указанному в вопросе:

sed '/^\.login-dialog-banner {/{N;s/color: #d6d6d1; }/color: rgba(255,255,255,1)\;\nfont-size: 14\;\ntext-align: center\;}/}' /etc/alternative/gdm3.css

Я ищу строку, начинающуюся со строки .login-dialog-banner {, а затем подставляя вторая строка: color: #d6d6d1; } с вашими следующими обязательными данными.

Если вышеуказанная команда работает для вас, вы можете включить опцию -i для редактирования файла на месте.

sed -i '/^\.login-dialog-banner {/{N;s/color: #d6d6d1; }/color: rgba(255,255,255,1)\;\nfont-size: 14\;\ntext-align: center\;}/}' /etc/alternative/gdm3.css

С man sed:

i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if SUFFIX supplied)
...