Как я могу извлечь определенную строку из файла?

Avahi является реализацией OpenSource Bonjour / Zeroconf.

выдержка - http://avahi.org/

avahi - это система, которая облегчает открытие услуг на местном Сеть через протокол MDNS / DNS-SD. Это позволяет подключить ваш ноутбук или компьютер в сеть и мгновенно сможет просматривать Другие люди, с которыми вы можете общаться, найдите принтеры для печати или найти файлы совместно используются. Совместимые технологии находятся в Apple Macos X (фирменные Bonjour и иногда Zeroconf).

A Подробнее подробное описание здесь вместе с статьей статьей Википедии . Статья Archlinux более полезная, указавая типы услуг, которые могут извлечь выгоду из Avahi.

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

Две большие преимущества avahi - это разрешение и поиск принтеров, но на сервере, в управляемой среде, это мало значение.

0
09.07.2014, 04:44
2 ответа

Using awk:

awk -F\* '/^BIG/ {gsub(/…/,""); print $NF}' file
A1001
8263-83313
8263-83313
2
28.01.2020, 02:17

Есть много способов сделать это. Например:

  • grep

     grep -oP 'BIG \ * 20021208 \ * 00001 \ ** \ K [A-Z0-9 -] +' файл
     

    Объяснение

    -o заставляет grep печатать только совпавшую часть строки, а -P активирует Perl-совместимое регулярное выражение (PCRE) синтаксис. \ K в PCRE приводит к тому, что все, что было сопоставлено до этого момента, отбрасывается (и поэтому не печатается из-за -o ). [A-Z0-9 -] - это класс символов , который соответствует любой заглавной букве от A до Z, любому числу или - и может повторяться до одного или более раз ( + ).

    Если ваши целевые строки могут также содержать строчные буквы, просто запустите grep с флагом -i или измените класс символов на [a-zA-Z0-9 -] .

    --- или ---

     grep -oP 'BIG \ * 20021208 \ * 00001 \ ** \ K. + (? =…)' Файл
     

    Объяснение

    Это то же самое, что и выше, только здесь, есть положительный просмотр вперед ( (? =…) ), что означает, что . + будет соответствовать, только если перед .

  • sed

     sed -rn 's /… // g; s /.* BIG \ * 20021208 \ * 00001 \ ** // p;'  файл
     

    Объяснение

    s / from / to / - это оператор подстановки sed. Он заменяет с на на . Первый заменяет ничем, он удаляет их ( g гарантирует, что это будет сделано для всех совпадений в строке). Второй удаляет все от начала строки (. * ) до BIG * 20021208 * 00001 ( * имеет особое значение в регулярных выражениях, поэтому он необходимо экранировать с помощью \ * ), затем 0 или более звездочек ( \ ** ). Вместе они удаляют все, кроме того, что вы хотите.

    -n подавляет печать любого вывода. p в конце второго оператора подстановки заставляет sed печатать любую ложь о том, где эта подстановка была успешной.

  • awk

     awk -F '[*…]' '/ BIG \ * 20021208 \ * 00001 \ ** / {print $ (NF-1)}' файл
     

    Пояснение

    -F устанавливает разделитель входных полей awk либо на * , либо на . Это означает, что предпоследнее поле будет тем, которое вам нужно. Приведенная выше команда печатает его в строках, соответствующих BIG * 20021208 * 00001 * .

  • Perl

     perl -lne '/BIG\*20021208\*00001\**(.*)…/ && print "$ 1"' файл
     

    Объяснение

    -n заставляет perl построчно читать вводимые данные и применять к нему сценарий, заданный параметром -e . -l добавляет символ новой строки к каждому вызову print . Приведенная выше команда попытается сопоставить интересующую строку (см. Объяснение к примеру sed выше) и распечатать ее в случае успеха.

    Вы также можете использовать тот же подход, что и в примере с awk:

     perl -F '[*…]' -lane '/ BIG \ * 20021208 \ * 00001 \ ** / && print "$ F [$  #F] "'файл
     
3
28.01.2020, 02:17

Теги

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