Как удвоить каждую строку выходного потока?

Как я могу удвоить каждую строку ввода?

Пример:

echo "foobar" | MYSTERY_COMMAND
Foobar
Foobar

Просто используйте sed p .

 echo foobar | sed p 

Вам не нужна cat :

 sed p input.txt # or sed p input.txt > output.txt 

объяснение

p – команда sed для «print».

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

Предположим, вы хотели только напечатать строки, содержащие слово «кумкват». Вы можете использовать -n чтобы прервать действие по умолчанию для печати sed , а затем прямо указать, чтобы печатать строки, соответствующие /kumquat/ :

 sed -n /kumquat/p 

Или, если вы хотите только напечатать 5-ю строку и ничего больше:

 sed -n 5p 

Или, если вы хотите распечатать каждую строку с 15-й строки до 27-й строки:

 sed -n 15,17p 

Если вы хотите напечатать каждую строку, кроме строк, которые содержат «kumquat», вы можете сделать это, просто удалив все строки kumquat и позволяя стандартным действиям sed по печати линии на незатушенных строках. Вам не нужен флаг -n или явная команда p :

 sed /kumquat/d 

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

Я должен действительно включить наиболее распространенную и полезную команду sed :

 sed s/apples/oranges/g 

Это заменяет каждый экземпляр «яблок» на «апельсины» и выводит результат.

(Если вы опустите флаг lobal в команду s ubstitute, будет изменен только первый экземпляр на каждой строке.)


Дальнейшее чтение (рекомендуется):

  • Sed – введение и учебник
 cat input.txt | awk '1;1' > output.txt 

edit: это более подробная версия joepd, оригинальная ниже

 cat input.txt | awk '{print $0 "\n" $0}' > output.txt