Когда я работаю с sedженой, мне легче всего сузить круг возможных результатов. Вот почему я иногда опираюсь на !оператор отрицания. Очень часто проще отсеять неинтересный вклад, чем демонстративно выбрать интересный вид - по крайней мере, это мое мнение по этому вопросу.
Я нахожу этот метод более встроенным в sedповедение по умолчанию, которое заключается в автоматической печати пространства шаблонов в конце сценария. Для простых вещей, таких как это, это также может легко привести к созданию надежного сценария - сценария, который не зависит от синтаксических расширений определенных реализаций для работы (как это обычно наблюдается sed {functions}) .
Вот почему я рекомендовал вам сделать:
sed '10,15!d;/pattern/!d;=' <input
... которая сначала обрезает любую линию, находящуюся вне диапазона строк 10 и 15, и из числа тех, которые остаются, обрезает любую линию, которая не соответствует pattern. Если вы обнаружите, что предпочли бы, чтобы номер строки sedпечатался на той же строке, что и совпадающая строка, я бы, вероятно, посмотрел pasteв этом случае. Может быть...
sed '10,15!d;/pattern/!d;=' <input |
paste -sd:\\n -
... который будет чередовать замену входных электронных \nлиний :символом или другой электронной \nстрокой.
Например:
seq 150 |
sed '10,50!d;/5/!d;=' |
paste -sd:\\n -
... печать ...
15:15
25:25
35:35
45:45
50:50
sed '10,15!d;/pattern/!d;='