Как работает команда sed P?

Я закончил тем, что узнал из вывода show ospf stateя имел в виду stubnetна языке BIRD, и узнал в неясном вопросе и в определении грамматики BIRD правильный синтаксис и место.

Таким образом, в конце настройки для присвоения стоимости конкретным маршрутам, объявленным OSPF в этом случае, выполняется определение тупиковой сети, объявляющей сеть в определении области OSPF, как в:

protocol ospf {
     tick 2;
        rfc1583compat yes;

        area 0.0.0.0 {
        #stub;
        networks {
            1.1.1.0/22;
        };
                stubnet 2.2.2.2/32 {
                    cost 100;
                };
                stubnet 3.3.3.3/32 {
                cost 500;   
        };
                stubnet 4.4.4.4/32 {
            cost 1000;
        };
                stubnet 5.5.5.5/32 {
            cost 900;
        };
                interface "eth0" {

                        cost 1000;
                        password "xxxxxxxxxxxxxxxxxxxx" {
                           id 5;
                        };
                        authentication cryptographic; 
                };

                interface "dummy0" {
                        stub;
                };
                interface "dummy1" {
                        stub;
                };
                interface "dummy2" {
                        stub;
                };
                interface "dummy3" {
                        stub;
                };

        };
}

Как видно из birdc, это сработало:

dns:/etc/bird# birdc
BIRD 1.6.3 ready.
bird> show ospf state
bird> 
area 0.0.0.0
.....................

    router 1.1.1.1
        distance 1000
        network 1.1.1.0/22 metric 1000
        stubnet 4.4.4.4/32 metric 1000
        stubnet 5.5.5.5/32 metric 900
        stubnet 3.3.3.3/32 metric 500
        stubnet 2.2.2.2/32 metric 100

.................

dns:/etc/bird# exit
0
27.08.2019, 00:12
2 ответа

Команда iничего не вставляет в пространство шаблонов. Он записывает свой текст в стандартный вывод.

Вот лучший пример:

$ cat file
line 1
line 2
line 3
line 4
$ sed -n 'N;P' file
line 1
line 3

Скрипт sedсчитывает строку в пространство шаблонов. Команда Nдобавляет следующую строку ввода к пространству шаблонов со встроенным символом новой строки в -между ними. Pзаписывает первую строку до новой строки, вставленной Nв пространство шаблонов. Следующий цикл начинается (без вывода в конце цикла из-за-n).

3
28.01.2020, 02:14

Для ошибки :вам нужен буквальный (символ новой строки )без обратной косой черты после текста команды i. В GNU sed вам может сойти с рук

seq 3 | sed -n -e '/2/{iline1\nline2' -e 'P}'

точно так же, как вам сошло с рук \nдля новой строки.

В противном случае:

seq 3 | sed -n '/2/{i\
line1\
line2
P;}'

Что касается ваших утверждений :, команда i"вставляет" в выходной файл, а не в пространство шаблонов. В исправленном примере пространство шаблона будет равно 2, что Pбудет напечатано полностью, так как оно не содержит новой строки.

Как правило, справочная страница GNU sed представляет собой беспорядок, и к ней следует обращаться только в отношении расширений GNU. Я рекомендую стандартную спецификацию , которая гораздо более удобочитаема :

.
[1addr]i\
text
       Write text to standard output.
[2addr]P
       Write the pattern space, up to the first <newline>, to standard
       output.
3
28.01.2020, 02:14

Теги

Похожие вопросы