Ищите строку и распечатайте все прежде и после в диапазоне

Просто бросьте этот двоичный файл в тот корневой каталог FAT флеш-накопителя (или возможно EFI/BOOT/ подкаталог, зависит IIRC) под именем shellx64.efi, или вовлеките себя копия перенаходки usbflash изображение, которое также служило бы достойным диспетчером начальной загрузки.

9
21.04.2016, 12:39
6 ответов

Вот две команды. Если вы хотите команду, которая обрезает до последнего .* {$ строка в последовательности (как @don_crissti делает с редактор ) , можно сделать:

sed 'H;/{$/h;/^}/x;/{\n.*PATTERN/!d'

..., который работает путем добавления каждой строки к H старое пространство после символ \newline, перезаписи h старое пространство для каждой строки, которая соответствует {$ , и луг свопинга старый h и пробелы образца для каждой строки, которая соответствует ^} - и таким образом сбрасывание его буфера.

Это только печатает строки, которые соответствуют { затем \newline и затем ОБРАЗЕЦ в какой-то момент - и который только когда-либо происходит сразу после буферной подкачки.

Это игнорирует любые строки в серии {$ соответствия к последнему в последовательности, но можно получить всех тех, которые включительно как:

sed '/PATTERN.*\n/p;//g;/{$/,/^}/H;//x;D'

то, Что это делает, подкачать образец и h старые пробелы для каждого ... {$.*^}.* последовательность, добавляет все строки в последовательности к H старое пространство после символ \newline, и D элиты до первого появления символ \newline в пространстве образца для каждого цикла строки прежде, чем запуститься снова с того, что остается.

, Конечно, единственное время это когда-либо добирается , \newline в пространстве образца - когда входная строка соответствует ^} - конец вашего диапазона - и поэтому когда это повторно выполняет сценарий в любом другом случае, это просто вытягивает в следующей входной строке за обычный.

, Когда ОБРАЗЕЦ найден в том же пространстве образца как \newline, тем не менее, это печатает партию прежде, чем перезаписать его с ^} снова (таким образом, это может закончить диапазон и сбросить буфер) .

, Учитывая этот входной файл (благодарит Дон) :

sometext1{
string1
}

sometext2{
PATTERN
string3
}

sometext3{
string4
string5
string6
}

Header{
sometext4{
some string

string unknown

here's PATTERN and PATTERN again
and PATTERN too
another string here
}
}

первая печать:

sometext2{
PATTERN
string3
}
sometext4{
some string

string unknown

here's PATTERN and PATTERN again
and PATTERN too
another string here
}

... и второе...

sometext2{
PATTERN
string3
}
Header{
sometext4{
some string

string unknown

here's PATTERN and PATTERN again
and PATTERN too
another string here
}
9
27.01.2020, 20:05

Используйте утилиту youtube-dl :

  • Проверьте, какие форматы доступны для конкретного видео:

     youtube-dl -F 'https://www.youtube.com/watch?v=xUZeZD9sytc'
    
  • Затем загрузите файл с лучшим качеством:

     youtube-dl -f18 'https://www.youtube.com/watch?v=xUZeZD9sytc'
    
-121--139814-

Это означает, что родитель демона (pid 677) начал новый сеанс, раскошелился, а дочерний (pid 678) унаследовал этот сеанс и продолжал работать.

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

Я бы сказал, что процесс является эффективным демоном, если PPID является 1 и у него нет управляющего терминала. Ограничение идентификатора сеанса/группы процессов часто также верно, но фактически не требуется для демонического поведения.

-121--139835-

sed -n '/ последовательностей /p ' имя файла

-n при добавлении в параметр sed suppressed sed поведение по умолчанию этого оператора может не дать вам точно то, что вы хотите, но он должен просто заменить последовательность

-2
27.01.2020, 20:05

Вот решение с ed:

ed -s filename <<< $'g/PATTERN/?{?,/}/p\nq\n'

:

g/PATTERN/     # mark each line matching PATTERN  
?{?,/}/p       # for each marked line, print all lines from the previous { up to the next }  
q              # quit editor

Это предполагает, что между каждой парой { } есть только одна строка с PATTERN, иначе вы получите дублирующий вывод для каждой дополнительной строки с PATTERN внутри одного и того же блока.
Он будет работать для нескольких { }, содержащих одну строку, соответствующую PATTERN, например, для тестового файла с PATTERN в двух разных разделах:

sometext1{
string1
}

sometext2{
PATTERN
string3
}

sometext3{
string4
string5
string6
}

Header{
sometext4{
some string

string unknown

here's PATTERN again

another string here
}
}

run

ed -s sample <<< $'g/PATTERN/?{?,/}/p\nq\n'

outputs:

sometext2{
PATTERN
string3
}
sometext4{
some string

string unknown

here's PATTERN again

another string here
}
6
27.01.2020, 20:05

С помощью pcregrep:

pcregrep -M '(?s)\{[^}]*PATTERN.*?\}'

Или с помощью GNU grep, если вход не содержит NUL байт:

grep -Poz '.*(?s)\{[^}]*PATTERN.*?\}'
4
27.01.2020, 20:05
$ awk 'BEGIN{RS="\n\n"; FS="[{}]"} {if ($2 ~ /string4/) {print $2}}' t1.txt
string4
string5
string6

где:

  • string4 -> строка для сопоставления
  • t1.txt -> содержит содержимое файла, упомянутого в запросе
0
27.01.2020, 20:05

Альтернативный вариант — следующий сценарий:

sed -n '
  /GROUP_START/,/GROUP_END/{ # define group as lines between these two patterns
    H                        #  append current line to hold-space
    /GROUP_END/{             #  on the last line of the group:
      x                      #   work on group from hold-space
      /PATTERN/{             #   if PATTERN is included in group:
                             #    optionally process the group here e.g. beautify
        s/^\n//p             #    remove first newline and print group
      }
      z;h                    #   effectively: zap hold-space for the next group
    }
  }
'

где ГРУППА _НАЧАЛО и ГРУППА _КОНЕЦ — шаблоны, определяющие, где начинается и заканчивается ваша группа (в вашем случае :{$, }$и ШАБЛОН — ваши критерии для групповой печати.

1
16.11.2020, 11:51

Теги

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