Як додати заголовок та / або колонтитул до потоку sed або awk?


14

У мене є куча результатів, які проходять через sed і awk.

Як я можу встановити префікс виводу за допомогою START і суфікс відповіді за допомогою END?

Наприклад, якщо я маю

All this code
on all these lines
and all these

Як я міг отримати:

START
All this code
on all these lines
and all these
END

?

Моя спроба:

awk '{print "START";print;print "END"}'

але я отримав

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END

Відповіді:



11

Це можна зробити в sedс

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1iозначає, що я вставляю перед рядком 1; $aозначає , що в ppend після останнього рядка. $'…'Синтаксис Баш-специфічні. В інших оболонках ви повинні зробити це за допомогою:

sed -e '1i \ Enter
START' -e '$ a \ Enter
END'Enter

8

Якщо ви вже використовуєте sed, ви можете використовувати 1для узгодження першого рядка та $відповідності останньому (див . Відповідь Скотта ). Якщо ви вже використовуєте awk, ви можете використовувати BEGINблок для запуску коду перед першим рядком і ENDблок для запуску коду після останнього рядка (див. Відповідь Майкла Дюрранта ).

Якщо все, що вам потрібно зробити, це додати заголовок і колонтитул, просто скористайтесь echoі cat.

echo START
cat
echo END

У конвеєрі для запуску декількох команд використовуйте, { … }щоб сказати аналізатору, що вони є однією єдиною складовою командою.

content-generator |
{ echo START; cat; echo END; } |
postprocessor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.