Использование пробелов и кавычек в качестве разделителя для awk

Как показано здесь, главная загрузочная запись MBR ()относительно проста;https://en.wikipedia.org/wiki/Master_boot_record.

Когда вы используете /dev/urandom, вы всегда можете создать что-то похожее на таблицу разделов.Решение состоит в том, чтобы заполнить области таблицы разделов нулями и использовать dev/urandomдля остальных.

Linux также поддерживает другие дополнительные форматы дисков, которые также потенциально могут срабатывать, вызывая появление «недействительных» разделов при заполнении случайными данными.

0
07.03.2021, 19:53
2 ответа

Вам нужно включить пробел в свой класс персонажа:

echo 'word1 word2"word2 word4"word5' | 
    awk -F '[ "]'  '{ for (i = 1; i <= NF; ++i) { print $i } }'
3
18.03.2021, 22:26

Вам нужен IP-адрес и пользовательский агент.

IP-адрес — это второе слово, разделенное пробелом -. Он будет в $2в awkсо значением по умолчанию FS.

Пользовательский агент — это строка в последней подстроке с двойными кавычками. Вы можете получить это, удалив последнюю двойную кавычку, а затем удалив все до того, что теперь является последней двойной кавычкой.

Сawk:

awk '{ ip = $2; sub("\"$",""); sub(".*\"",""); ua = $0; print ip; print ua }'

или, немного короче,

awk '{ ip = $2; sub("\"$",""); sub(".*\"",""); print ip; print }'

Сsed:

sed -e 'h' -e 's/[^ ]* //;s/.*//p' \
    -e 'g' -e 's/"$//;s/.*"//'

При этом сначала сохраняется строка в удерживаемом пространстве (h), затем извлекается номер IP путем удаления до первого пробела, а затем из (теперь )первого пробела. Это изолирует номер IP, который печатается. Затем извлекается сохраненная строка(g)и применяется та же процедура, что и в коде awk, т.е. удаляется последняя двойная кавычка, а затем все до (теперь )последней двойной кавычки.

Обе команды печатают номер IP в одной строке, а затем строку пользовательского агента в следующей.

1
18.03.2021, 22:26

Теги

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