Ответы:
Вы можете использовать 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
.