Відповіді:
Ви можете використовувати 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 та перенаправлення stdin:
$ 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.