Ответы:
Вы можете использовать sedдля этого:
sed -i.bak 's/^/##/' file
Это заменяет начало строки ( ^) на ##.
С помощью -i.bakпереключателя sedредактирует файл на месте, но создает резервную копию с расширением .bak.
sed 's/^\(.*\)$/##\1/', но это гораздо приятнее.
Вот решение этой проблемы с использованием Perl
perl -e 'while (<>) {print "##$_"}' < infile > outfile
-pПереключатель также полезен: perl -pe 's/^/##/' infile > outfile. (Также есть -i[extension]переключатель для замены целевого файла на месте.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Пока мы на это:
gawk -i inplace '{print "##"$0}' infile
При этом используется (сравнительно новый) плагин редактирования на месте для GNU awk 4.1.0+.
Вот bashспособ:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
( В bashоболочке запуск read -rбез других аргументов работает подобно IFS= read -r REPLY.)
Это стилистически вдохновлено Perl-решением beav_35 , которое, я допускаю, вероятно, работает намного быстрее для больших файлов, поскольку perlможно ожидать, что оно будет более эффективным, чем оболочка, когда дело доходит до обработки текста.
Вы можете использовать Vim в режиме Ex:
ex -sc '%s/^/##/|x' file
% выбрать все строки
s замена
x сохранить и закрыть
Может быть сделано с помощью функции отображения Python и перенаправления стандартного ввода:
$ cat input.txt
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))' < input.txt
##lorem ipsum
##quick brown fox
##hello world
Сохраните вывод в новый файл и используйте его вместо оригинального
sed 's/^/##/' -i file. В этом случае это было бы предпочтительным, так как это не может пойти не так. В других случаях эта команда может быть объединена с,diff -u file.bak fileчтобы увидеть различия (при необходимости, передать это черезless). Если подтверждено, что резервная копия может быть удалена. В противном случае это может быть восстановлено с помощью простогоmv file.bak file.