Поиск шаблона между определенными строками и номерами строки печати

Ядро работает от RAM. Невозможно выгрузить код ядра или данные. Сам Linux никогда не получает доступ к файлу, содержащему ядро (за исключением части системных обновлений). Действительно в некоторых встроенных системах ядро не могло бы быть доступно для ОС вообще, но вместо этого расположенное в месте, где загрузчик может найти его. Некоторый код привилегированного режима загружается из файлов модуля, но после того, как модуль загружается файл, из которого он прибывает, не имеет значения.

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

2
11.01.2015, 06:50
3 ответа

Использование NL :

nl file | sed -n '10,15{/pattern/p
}'
1
27.01.2020, 21:56

Вот решение awk:

awk '10<=NR && NR<=15 && /pattern/ {print NR,$0}' file

Если мы должны использовать только sed, то учтите: команда

sed -n '10,15 {/pattern/ {=;p}}' file | sed 'N;s/\n/ /'

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

1
27.01.2020, 21:56

При работе с w/ sed я обычно считаю, что легче всего последовательно сузить мой возможный результат. Поэтому я иногда опираюсь на ! оператор отрицания. Очень часто проще убрать неинтересные входные данные, чем целенаправленно выбирать интересный вид - по крайней мере, таково мое мнение по этому поводу.

Я нахожу этот метод более близким к поведению по умолчанию sed, которое заключается в автоматической распечатке шаблона-пространства в конце скрипта. Для простых вещей, как это обычно бывает с sed {functions}), это также может привести к робастному скрипту - скрипту, который не зависит от расширений синтаксиса некоторых реализаций для работы (как это обычно бывает с sed {functions}).

Поэтому я рекомендую:

sed '10,15!d;/pattern/!d;=' <input

... которая сначала обрезает любую линию, не находящуюся в диапазоне 10 и 15, а из тех, которые остаются обрезанными, любую линию, которая не соответствует шаблону . Если вы обнаружите, что предпочитаете, чтобы номер линии sed печатался на той же линии, что и ее совпадение, я, вероятно, посмотрю на paste в этом случае. Может быть...

sed '10,15!d;/pattern/!d;=' <input |
paste -sd:\\n -

... которая будет просто чередовать замену входной \newline либо символом :, либо другой \n ewline.

For example:

seq 150 |
sed '10,50!d;/5/!d;=' |
paste -sd:\\n -

...prints...

15:15
25:25
35:35
45:45
50:50
3
27.01.2020, 21:56

Теги

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