Когда я работаю с 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;='