Извлечение части из столбца файла

Это просто означает, что virtualbox использует старую поддержку Linux API. Это удерживается от использования, но все еще поддерживается, и предупреждение там, чтобы сказать virtualbox разработчикам идти дальше и использовать нового.

3
10.01.2014, 21:02
3 ответа

Я могу дать лучший ответ, если Вы показываете свой фактический вход, но если все, в чем Вы нуждаетесь, должно удалить символы после # (включительно), используйте любой из них (предположение, что Ваши строки только содержат сингл #):

awk '/view external.*denied/{print $7}' logfile | sed 's/#.*//'

или

awk '/view external.*denied/{print $7}' logfile | cut -d '#' -f 1
2
27.01.2020, 21:23
  • 1
    awk '/view external.*denied/{print $7}' /var/log/messages | sed 's/#.*//' |sort |uniq -c |sort -rn –  archmicht 10.01.2014, 21:17

Можно сделать это с единственной командой 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}'
1
27.01.2020, 21:23
sed 's/\#.*$'//' /path/to/logfile # this will trim anything including and after a `#` on every line.
0
27.01.2020, 21:23
  • 1
    Возможно, Вы могли развернуть это немного и объяснить, что Вы делаете? –  slm♦ 10.01.2014, 20:52
  • 2
    Спасибо, но я должен был скорректировать команду sed для создания, она работать, как terdon сделала. –  archmicht 10.01.2014, 21:07

Теги

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