команда sed для удаления строки, содержащей символы /,\

Сетевая маска — это количество битов IP-адреса для сети и сколько (путем вычитания из 32 )для клиентов или адресов в подсети. Ваша проблема с опубликованной конфигурацией заключается в том, что шлюз находится за пределами настроенной подсети... поэтому до него невозможно добраться.

Возможно, вы захотите пересмотреть либо конфигурацию сети, либо тип используемой сети виртуального бокса.

Мое стандартное введение для моих студентов (Службы Linux )на типах сети vbox-

1 )NAT -делает то, что говорит. К сожалению, он не создает соответствующий адрес на вашем хост-компьютере. Единственный способ подключения — переадресация отдельных портов, как на домашнем маршрутизаторе. Делается это в интерфейсе менеджера, в настройках машины, на вкладке сети. Если в качестве типа сети выбран «NAT» и карта активна/включена, кнопка «Переадресация портов» будет активна и доступна.

1b )"Сеть NAT" -То же, что и выше, но сначала необходимо настроить сеть NAT. Вы сможете выбрать подсеть, если есть DHCP и т. д. Если у вас есть несколько виртуальных машин в «сети NAT», они могут обмениваться данными между собой.Вы можете создать несколько имен и подсетей «NAT network», они не будут видеть друг друга, если вы не сделаете все возможное, чтобы настроить это.

2 )Мост -это мост через одно из ваших устройств Ethernet на хост-компьютере и подключение напрямую к сети, как если бы оно было подключено к какой-то розетке. ОДНАКО... некоторые рабочие места, школы и т. д. не позволяют нескольким MAC-адресам обмениваться данными через один порт управляемого коммутатора, и если это так, в какой бы локальной сети вы к ней ни подключались, это не будет работать.

3 )Только хост -создает виртуальную сеть между вашим хост-компьютером и гостем (с ). Доступна служба dhcp, но она не предоставляет шлюз. Если вы хотите, чтобы ваши гости подключались, вам нужно настроить NAT/и т. д. на хост-компьютере и предоставить доступ таким образом.

4 )Только внутренний -подключает машины к виртуальному внутреннему немому коммутатору. Ни службы DHCP, ни доступа к шлюзу, ничего. О, и нет соответствующего адаптера на вашем хост-компьютере.

Что я делаю для практики/игровой площадки/экспериментов, так это настраиваю одну машину с 2 интерфейсами -один на мосту и один внутренний. Затем я превращаю его в машину-маршрутизатор с фальшивым доменом (fake.tld )службой DNS, DHCP, кэширующей службой DNS для всего мира и т. д., а затем запускаю другую VMS, чтобы экспериментировать и делать что-то с ней. только внутренняя сеть

0
03.12.2020, 15:20
3 ответа

Проблема в том, что как\(экранирующий символ ), так и*(0 или более )имеют особое значение в регулярных выражениях, поэтому вам нужно экранировать их, чтобы использовать их как буквальные символы. Теперь, чтобы избежать чего-то, нужно добавить перед ним \. Таким образом, чтобы *соответствовало буквальной звездочке, а не означало «0 или более», вы должны написать \*. Точно так же, чтобы избежать \, вы должны написать \\. Сопоставив это вместе, мы имеем:

$ cat file 
foo
bar
/abc/gef        \*(cse,fff)
baz

И:

$ sed '/\/abc\/gef        \\\*(cse,fff)/d' file 
foo
bar
baz

Обратите внимание, что я также избежал /, так как //является оператором сопоставления в sed. Вот почему у нас есть /\/abc\/gef, а не //abc/gef. dв конце означает «удалить любую строку, соответствующую этому шаблону».

1
18.03.2021, 22:45

Следующее работает с GNU sed версий 4.5 и 4.7 и удалит все строки, содержащие строку:

sed '/\/abc\/gef        \\\*(cse,fff)/d' file

Вы должны использовать \для экранирования двух экземпляров /в строке, чтобы они не воспринимались как разделитель и *, который в противном случае расширяется до символа перед ним f. Последнее приведет к тому, что он не будет соответствовать строке.

Вы также можете использовать опцию s, которая позволяет использовать другие символы в качестве разделителя, если вы хотите удалить только саму строку во всем файле, а не всю строку:

sed 's|/abc/gef        \\\*(cse,fff)||g' file

Это использует |в качестве разделителя, поэтому вам не нужно экранировать /.

Чтобы отредактировать файл на месте после того, как вы убедитесь, что он делает то, что вам нужно, вы можете использовать -i, как указано выше:

sed -i '/\/abc\/gef        \\\*(cse,fff)/d' file

sed -i 's|/abc/gef        \\\*(cse,fff)||g' file

РЕДАКТИРОВАТЬ :Я обновил ответ, поскольку строка в вопросе отличается от того, что было при первоначальной публикации.

2
18.03.2021, 22:45

Похоже на работу grep:

$ cat file
line 1
line 2
/abc/gef        *(cse,fff)
line 4

$ grep -Fxv '/abc/gef        *(cse,fff)' file
line 1
line 2
line 4
1
18.03.2021, 22:45

Теги

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