Это просто означает, что virtualbox использует старую поддержку Linux API. Это удерживается от использования, но все еще поддерживается, и предупреждение там, чтобы сказать virtualbox разработчикам идти дальше и использовать нового.
Я могу дать лучший ответ, если Вы показываете свой фактический вход, но если все, в чем Вы нуждаетесь, должно удалить символы после #
(включительно), используйте любой из них (предположение, что Ваши строки только содержат сингл #
):
awk '/view external.*denied/{print $7}' logfile | sed 's/#.*//'
или
awk '/view external.*denied/{print $7}' logfile | cut -d '#' -f 1
Можно сделать это с единственной командой sed. Во-первых, как общую стратегию, для извлечения части строки в sed, использование s
команда, с regex, который соответствует целой строке (запускающийся с ^
и окончание $
), с частью для сохранения в группе (\(…\)
), заменяя целую строку содержанием группы (групп) для хранения. Передайте -n
опция выключить печать по умолчанию и поместить p
модификатор для печати строк, где существует что-то для извлечения. Можно ограничить извлечение далее путем добавления префикса команды regex, который должен соответствовать строке.
sed -n '/view external.*denied/ s/^.* client \([0-9.][0-9.]*\)#.*/\1/p'
Если Вы предпочитаете использовать awk, можно использовать sub
функция для удаления части строки.
grep -E 'view external.*denied' /var/log/messages |
awk '{sub(/#.*/, "", $7); print $7}'
Можно также использовать index
функция для определения местоположения #
и substr
функционируйте для извлечения части, которую Вы хотите сохранить.
grep -E 'view external.*denied' /var/log/messages |
awk '{print substr($7, 1, index($7, "#"))}'
Можно легко объединить команду grep в команду awk.
</var/log/messages awk '/view external.*denied/ {sub(/#.*/, "", $7); print $7}'
sed 's/\#.*$'//' /path/to/logfile # this will trim anything including and after a `#` on every line.
awk '/view external.*denied/{print $7}' /var/log/messages | sed 's/#.*//' |sort |uniq -c |sort -rn
– archmicht 10.01.2014, 21:17