Додайте ## до кожного рядка текстового файлу


30

Я хочу додати хеші до всіх рядків у звичайному текстовому файлі. Я добре з використанням терміналу та графічного інтерфейсу - мені просто потрібно це зробити.

Відповіді:


50

Ви можете використовувати sedдля цього:

sed -i.bak 's/^/##/' file

Це замінює початок рядка ( ^) на ##.

За допомогою -i.bakперемикача sedредагує файл на місці, але створює резервну копію з розширенням .bak.


1
+1 Це перший раз, коли я стикаюся з цим методом резервного копіювання. Я завжди так інлайн замінити безпосередньо: sed 's/^/##/' -i file. У цьому випадку це було б кращим, оскільки воно не може піти не так. В інших випадках цю команду можна комбінувати, diff -u file.bak fileщоб побачити відмінності (якщо потрібно, передати її через less). Якщо це підтверджено, резервну копію можна буде видалити. Інакше його можна буде відновити простим mv file.bak file.
Лекенштейн

1
Елегантний. Я думав про щось подібне sed 's/^\(.*\)$/##\1/', але це набагато приємніше.
влаштовуйте

Гарний .. Я думав над тим, щоб запропонувати Віму зробити це ...
Сатіш

Це допомогло мені перетворити файл списку блоків :) Дякую 1+
Ніл

8

Ось вирішення цієї проблеми за допомогою perl

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
-pПеремикач також корисний: perl -pe 's/^/##/' infile > outfile. (Є також -i[extension]перемикач для заміни цільового файлу на місці.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka


4

Ось такий bashспосіб:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( У bashоболонці працює read -rбез будь-яких інших аргументів IFS= read -r REPLY.)

Це стилістично натхнене рішенням perl beav_35 , яке, мабуть, працює набагато швидше для величезних файлів, оскільки, perlможливо, очікується, що воно буде більш ефективним, ніж оболонка, коли мова йде про обробку тексту.


3

sed -iне є стандартом POSIX, тому, якщо ви пурист, ви хочете використовувати ed:

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

Ось простіший perlспосіб, ніж представлено в інших місцях:

perl -pi -e 'print "##"' YOURFILEHERE

Це (ab) використовує той факт, що perl -pдрукує рядок після виконання команди, заданої в -e.


0

Ви можете використовувати Vim в режимі Ex:

ex -sc '%s/^/##/|x' file
  1. % виберіть усі рядки

  2. s замінник

  3. x зберегти і закрити


0

Це можна зробити за допомогою функції відображення 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

Збережіть вихід у новому файлі та використовуйте його замість оригіналу

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.