Я хочу добавить хеши ко всем строкам в файле обычного текста. Все хорошо и с использованием терминала и с GUI — я просто должен был сделать его.
Можно использовать sed
сделать это:
sed -i.bak 's/^/##/' file
Это заменяет запуск строки (^
) с ##
.
С -i.bak
переключатель, sed
редактирует оперативный файл, но создает резервную копию с расширением.bak
.
Вот решение этой проблемы с помощью жемчуга
perl -e 'while (<>) {print "##$_"}' < infile > outfile
В то время как мы в нем:
gawk -i inplace '{print "##"$0}' infile
Это использует (сравнительно новый) оперативный плагин редактирования для GNU awk 4.1.0 +.
Вот a bash
путь:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
(В bash
оболочка, работая read -r
без других аргументов работает как IFS= read -r REPLY
.)
Это стилистически вдохновлено решением для жемчуга beav_35, которое я допускаю, вероятно, выполнения намного быстрее для огромных файлов с тех пор perl
как могут ожидать, будет более эффективным, чем оболочка когда дело доходит до обработки текста.
sed -i
не является стандартным POSIX, поэтому если Вы будете пуристом, то Вы захотите использовать ed
:
printf ",s/^/##/\nw\nq" | ed -s file.txt
Вот более легкое perl
путь, чем представленный в другом месте:
perl -pi -e 'print "##"' YOURFILEHERE
Этот (ab) использует факт это perl -p
печатает строку после выполнения поданной команды -e
.
Можно использовать 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
Сохраните вывод в новый файл и используйте его вместо оригинала