Какая у вас среда передачи уровня 2? Ethernet? Невозможно иметь кадр Ethernet короче 64 байтов, независимо от того, что он несет.
Таким образом, даже если вы можете послать эхо-запрос ICMP с 0 байтами полезной нагрузки, ваша карта Ethernet заполнит кадр до 64 байтов для передачи.
@Casey показал, что ваш теоретический минимум составляет 28 байтов, но Ethernet добавит 36 байтов заполнения, чтобы довести его до 64 байтов. Меньше - это Runt-пакет, и он слишком короткий.
Почему 64 байта? Это совершенно новый вопрос, связанный со временем передачи бита и обнаружением коллизий, и что Ethernet является доменом CSMA / CD, а не CSMA / CA.
Можно использовать sed
диапазоны:
sed '/^ *ssl:/,/^ *[^:]*:/s/enabled: false/enabled: true/' file
Границами диапазона являются/^ *ssl:/
(начало раздела ssl )и/^ *[^:]*:/
(любой другой раздел ).
s
— обычная команда замены.
Используйте инструмент, поддерживающий YAML -. Например, в Perl вы можете
perl -MYAML=LoadFile,DumpFile -we '
$y = LoadFile("file");
$y->{ssl}{enabled} = "true" if $y->{ssl}{enabled} eq "false";
DumpFile("file.new", $y);'
Вы были рядом, чтобы найти, и вам нужно было только добавить опцию -z
, также вы можете сделать ее короче, как показано ниже.
sed -Ez 's/(ssl:\n\s*enabled: )false/\1true/g' infile
Извините, но я соглашусь с @choroba и посоветую вам использовать инструмент, способный парсить и писать yaml. Разбор Sed - неправильный путь. у вас может быть другой отступ, несколько непрерывных концовок. Регулярное выражение стало бы слишком сложным, и вам пришлось бы писать свой собственный синтаксический анализатор Yaml.
Вот решение на рубине Что вы можете использовать в оболочке Bash
echo "ssl:
enabled: false
" | bundle exec ruby -e "require 'psych';
c = Psych.load(STDIN.read); c['ssl']['enabled'] = true;
puts c.to_yaml" > updated_dest.yml
если вам нужен сценарий оболочки, который принимает два параметра, это также легко
#!/usr/bin/env ruby
require 'psych'
c = Psych.load_file(ARGV.shift)
c['ssl']['enabled'] = true
File.open(ARGV.shift, 'wb+') {|f| f.write(c.to_yaml)}