Строки печати между (и включая) два шаблона

Когда драйвер запрашивает общий IRQ, он передает указатель на ядро к ссылке на устройство определенная структура в пространстве памяти драйвера.

Согласно LDD3:

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

После проверки обработчиков IRQ нескольких драйверов кажется, что они зондируют сами аппаратные средства, чтобы определить, должно ли это обработать прерывание или возврат IRQ_NONE.

Примеры

Драйвер UHCI-HCD
  status = inw(uhci->io_addr + USBSTS);
  if (!(status & ~USBSTS_HCH))  /* shared interrupt, not mine */
    return IRQ_NONE;

В коде выше, драйвер читает USBSTS регистр, чтобы определить, существует ли прерывание к сервису.

Драйвер SDHCI
  intmask = sdhci_readl(host, SDHCI_INT_STATUS);

  if (!intmask || intmask == 0xffffffff) {
    result = IRQ_NONE;
    goto out;
  }

Так же, как в предыдущем примере, драйвер проверяет регистр состояния, SDHCI_INT_STATUS определить, должно ли это обслужить прерывание.

Драйвер Ath5k
  struct ath5k_softc *sc = dev_id;
  struct ath5k_hw *ah = sc->ah;
  enum ath5k_int status;
  unsigned int counter = 1000;

  if (unlikely(test_bit(ATH_STAT_INVALID, sc->status) ||
        !ath5k_hw_is_intr_pending(ah)))
    return IRQ_NONE;

Просто еще один пример.

16
05.03.2018, 16:01
4 ответа

Вы - более обеспеченное использование или

awk '/CK$/,/D$/' file.txt

ИЛИ

sed -n '/CK$/,/D$/p' file.txt

Если Вы настаиваете , вот является GNU grep путем

grep -oPz '(?s)(?<=\n)\N+CK\n.*?D(?=\n)' file.txt

Здесь

-P активирует perl-regexp

-z разделитель строки наборов к NUL. Это вынуждает grep рассматривать весь файл как одну одну строку

-o печать, только соответствующая

(?s) активирует PCRE_DOTALL, таким образом, . находит любую символьную или новую строку

\N соответствия что-либо кроме новой строки

.*? находит. в нежадном режиме

(?<=..) оглянуться утверждение

(?=..) предварительное утверждение

21
27.01.2020, 19:48
  • 1
    , почему не добавленная наклонная черта? как это awk '/\/CK/,/\/D/' input –  Rahul Patil 08.11.2013, 19:37
  • 2
    @RahulPatil, поэтому OP, указанные ', начинают держать от строк, который имеет "CK" в конце строки, и прекратите держать, когда строка имеет "D"', –  iruvar 08.11.2013, 19:38
  • 3
    это кажется мной, у Вас есть глубокое понимание regex.. Я не понял, что уровень, таким образом, Вы могли объяснить, что последний из PCRE grep –  Rahul Patil 08.11.2013, 19:41
  • 4
    @RahulPatil, добавило некоторое объяснение :-) –  iruvar 08.11.2013, 20:14
  • 5
    @RohitPatil, я хочу удалить выбор соответствия из файла. я могу сделать это? –  Rana Khan 08.11.2013, 20:18

Если вы используете BSD grep (не поддерживает perl regex param -P), вот обходной путь:

grep -o "aaa.*cdn" <(paste -sd_ file) | tr '_' '\n'

Это работает путем конкатенации всех строк (заменяя новые строки символом _), проверки однострочного шаблона и расширения строк до исходного состояния.

Если вы используете GNU grep, вы можете добиться многострочного совпадения в grep, но вам нужно использовать perl-regexp для grep (-P), как упоминалось в другом ответе. Вы все еще можете установить GNU grep на macOS через brew install grep и использовать ggrep вместо него.


Также вы можете использовать pcregrep который поддерживает многострочные шаблоны (-M).


Вы также можете использовать команду ex, например:

ex +"/aaa/;/cdn/p" -scq! file
0
20.08.2021, 13:02
`awk '/CK$/{f=1}/D$/{f=0;print;exit}f' filename

gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
0
09.10.2021, 10:07

Использование Perl (5):

perl -nE 'print $_ if /CK$/.../D$/;'

Использование Raku (, ранее известного как Perl _6):

raku -ne 'put $_ if /CK$/fff/D$/;'

Обе строки кода выше используют sed -как оператор «флип -флоп». В Perl5 sed -как «флип -флоп» пишется .... В Раку sed -как «флип -флоп» пишется fff.

Пример ввода:

kkkkkkkkkkk   
jjjjjjjjjjjjjjjjjj  
gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D  
GGGGGGGGGGGGGG  
GGGGGGGGGGGGGG

Пример вывода (Perl5 или Raku):

gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D

Обратите внимание, поскольку Раку использует точку .для цепочки операций, код Раку, начинающийся put $_…, можно записать $_.put…. Кроме того, если цепочка методов начинается с точки ., Raku по умолчанию вызывает цепочку для переменной темы $_. Таким образом, код Раку, представленный выше, может быть сокращен до $_.put… и еще более сокращен до .put….

https://perldoc.perl.org/perlop
https://raku.org

0
10.10.2021, 03:12

Теги

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