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