Как найти имя интерфейса Cisco и все IP-адреса в этом разделе

sed 'expression;expression' 

совпадает с

sed -e 'expression' -e 'expression'

, что в некоторых простых случаях совпадает с

sed -e 'expression' | sed -e 'expression'

В вашем случае (из того, что я вижу ), вы пытаетесь изменить все &на <. Затем все <в новые строки, а затем, наконец, вы добавляете <в начало строк:

s/\&/\</g;s/\</\
/g;s/^/\</g

С заданным вводом этот sedскрипт выполнит следующие действия с BSDsed:

$ sed -f script.sed file
<
<

<

<

Или с GNUsed:

$ gsed -f script.sed file
<
<
str
<
int
<
int

Почему это?

  1. Во-первых, в файле (нет &\перед &можно дополнительно опустить ), поэтому первое выражение — это no -op.
  2. Второе выражение соответствует \<, которое является (началом границы )слова. Честно говоря, я немного озадачен тем, почему текст удаляется BSD sed(. Я посмотрю, является ли это ошибкой OpenBSD sed). Так что это вставляет новую строку в начале каждого слова файла примера.
  3. Третье выражение, все еще работающее с той же (, теперь измененной )строкой ввода, вставляет <в начале строки.

В отличие от этого, единственное выражение s/^/\</g(, в котором \перед <и модификатор gне нужны ), будет просто вставлять <в начале каждого линия.


Следуйте за -вверх :Было подтверждено, что в sedреализации на OpenBSD 6.1 -была ошибка, связанная с добавлением строки перед строкой, начинающейся со вставленной новой строки. Патч отправлен.

0
06.01.2020, 10:08
1 ответ

Использование :

perl -lne 'print "\n$_" if /interface/; print if / ip./' file

Использование :

awk '/interface/{print "\n"$0} / ip./' file

 Вывод

interface Loopback0
 ip address 10.1.1.11 255.255.255.255

interface FastEthernet0/0
 ip address 10.0.12.1 255.255.255.0

interface FastEthernet0/1
 ip flow monitor all-traffic-monitor output
 ip address 10.0.100.1 255.255.255.0

interface Ethernet1/0
 ip address 10.0.13.1 255.255.255.0
 ip helper-address 10.1.1.1
 ip helper-address 10.1.1.2
0
28.01.2020, 02:57

Теги

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