Выберите строки и формат

  • Get ROOTFS_QTOPIA_QT4-20121108.TAR.GZ из DVD-DVD

  • yaffs2utils на моей среде Dev.

  • Перестроили изображение

    sudo tar xvf rootfs_qtopia_qt4-20121108.tar.gz
    sudo mkyaffs2 rootfs_qtopia_qt4 rootfs_qtopia_qt4.img
    

    и скопировали на мою карту microSD и скорректировали мою SitearmaRM.ini , чтобы взять этот файл вместо Flash-версии MLC2 NAND.

    -121--244541-

    for f do exec <"$f"
        : handle stdin
    done
    

    Неинтерактивная оболочка будет обрабатывать любое перенаправление из файла, которое не может быть прочитано, или что не существует при ассоциированном W / специальном встроенном в качестве фатальной ошибки и выхода сразу со значимым диагностическим сообщением. Написано в Стдерр. Таким образом, ваши параметры являются действительными, читаемые файлы и приведенное выше оператор не сделают ничего полезного, пока вы не замените : ... Часть w / что-то полезное, или пользователь предоставил неверный параметр, и сценарий выходит на основе осмысленно. Отказ

    Когда вы делаете ...

    for var in ...; do : compound command list on "$var"; done
    

    в в ...; в ...; BIT - это необязательное оператор в синтаксисе, который позволяет заменить параметр, установленный для набора по умолчанию, который является вашим списком аргументов Отказ

    Так что ...

    for var do : compound command list on "$var"; done
    

    ... вероятно, что вы ищете здесь.

    for f do exec <"$f"
        : now do some stuff w/ stdin
    done
    

    ... где оболочка будет итеречно назначать stdin и проверяют как читаемые файлы, любые аргументы предоставили ваш скрипт для всех команд, которые следуют следующему инструкции , пока все параметры не будут исчерпаны, и для LOOP IS сделано . Если он не может сделать это, то он будет отформатировать и распечатать ваше сообщение об ошибке для вас в стандартной форме, к которой пользователь уже привыкнет.

0
31.03.2015, 20:13
2 ответа

Вот один из способов Perl:

perl -ne 'if (/^adc\s+\w+\s+(\w+)/) { print "Name: $1\n" }
          elsif (/^\s*rules\s*{/) { $inrule = 1; }
          elsif (/}/) { $inrule = 0; }
          elsif (/^\s*(\S*)/) { print "Rule: $1\n" if $inrule; }'

это проходит через каждую строку файла, печатает имя : Линия, когда Он видит линию ADC , а затем делает плохую попытку распознавания Правила {} Блоки, печать каждую строку из них как правило: .

Было бы гораздо более надежно использовать правильный парсер для вашего ввода формат; Этот одноклассник сломается, если макет не совсем так, как в ваш вопрос.

0
28.01.2020, 04:57

Существует несколько программ для создания соединений сокетов из командной строки (или через скрипт оболочки). Наиболее распространенным, вероятно, NetCat, из которых существует как минимум три реализации:

  • Оригинал один © 1995-1996 Avian Research (NetCat Hobbit). Никакой хорошей агрессивной ссылки, о которой я знаю, так вот входит в пакет Debian Tracker: https://tracker.debian.org/pkg/netcat

  • netcat6, переписывание. Сейчас объявлено устаревшим; http://www.deepspace6.net/projects/netcat6.html

  • netcat-openbsd, переписывание проектом OpenBSD. , вероятно, тот, который вы хотите. код можно увидеть по адресу http://bxr.su/openbsd/usr.bin/nc/

  • SOCAT, а не переписать, а одинаковую идею, со многими дополнительными функциями. Другой хороший выбор Если вам нужны все функции и не против дополнительной сложности. http://www.dest-unreach.org/socat/

Ручная страница дает много примеров, например, как (на основе гораздо более страшных примеров на странице человека) вы можете запустить BC На разъеме:

mkfifo /tmp/f && cat /tmp/f | bc -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

Затем вы можете подключиться к этой сети BC , используя:

nc localhost 1234

или с SOCAT , это:

socat EXEC:'bc -i' TCP4-LISTEN:1234,bind=127.0.0.1   # server
socat - TCP4:127.0.0.1:1234                          # client
-121--174906-

Если для формата файла есть правильный парсер, вы должны использовать его. Не хватает этого, вот решение, которое работает для вашего образца ввода:

$ awk '/^adc/{print "name:",$3} /^[[:space:]]*rules/{getline;print "rule:",$1}' file
name: name_of_virtual_server
rule: Exchange__all_services2.dat/Exchange__all_services2_rule7

Как он работает

  • / ^ adc / {print "Имя:", $ 3}

    для любой строки, которая начинается с ADC , распечатайте Имя: и третий элемент на линии.

  • / ^ [[: Space:]] * Правила / {getline; Print "Правило:", $ 1}

    для любой строки, которая начинается с пробелов (необязательно), а затем правила , это распечатывает первый элемент на линии, которая следует.

0
28.01.2020, 04:57

Теги

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