Как всегда в 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 первым в конвейере.