Как всегда в Unix, есть варианты.
paste
Используйте утилиту paste
с пустым файлом LHS, например:
cat ~/.bashrc | paste /dev/null -
Команда cat
является заполнителем для вашего второго скрипта.
Команда paste
разработана, чтобы взять два файла и собрать их вместе, например:
$ paste file1 file2
file 1 line 1 <TAB> file 2 line 1
file 1 line two <TAB> file 2 line 2
file 1 line 3 <TAB> file 2 line iii
То, как я использую это выше, - это использовать /dev/null
качестве file1
, а STDIN
качестве file2
, заданный -
. При использовании в качестве входных данных /dev/null
возвращает символы NULL. Это означает, что каждой строке file2
, выводу вашего второго скрипта, предшествует NULL, за которым следует символ TAB.
Вы можете пойти дальше: paste
имеет параметр --delimiter
, но указание двух пробелов не дает ожидаемого эффекта: разделитель 1 используется между первым и вторым столбцами, разделитель 2 используется между вторым и третьим и т.д.
paste|expand
Чтобы получить отступ с двумя пробелами, вы должны снова использовать обычную paste
каналу через команду expand -2
: это превращает все вкладки в два пробела:
cat ~/.bashrc | paste /dev/null - | expand -2
Это будет вести себя точно так, как вы указали.
sed
или awk
Еще один подход заключается в использовании sed
или awk
:
cat ~/.bashrc | sed 's/^/ /'
Это ищет начало строки (" ^
") и заменяет или действительно вставляет пару пробелов.
cat ~/.bashrc | awk '{printf " %s\n",$0}'
Он берет каждую полную строку (« $0
») и форматирует ее с помощью printf
, используя спецификатор формата из двух пробелов, за которым следует строка для печати, за которой следует новая строка.
Имейте в виду, что все вышеперечисленные команды могут исключить часть cat
конвейера, например paste /dev/null ~/.bashrc
или paste /dev/null ~/.bashrc|expand -2
, равно как sed 's/^/ /' ~/.bashrc
или awk '{printf " %s\n",$0}' ~/.bashrc
. Часто в качестве ошибки новичка принято использовать cat
первым в конвейере.