Odpowiedzi:
Możesz użyć sed
do tego:
sed -i.bak 's/^/##/' file
Zastępuje to początek wiersza ( ^
) znakiem ##
.
Za pomocą -i.bak
przełącznika sed
edytuje plik w miejscu, ale tworzy kopię zapasową z rozszerzeniem .bak
.
sed 's/^\(.*\)$/##\1/'
, ale jest to o wiele ładniejsze.
Oto rozwiązanie tego problemu za pomocą Perla
perl -e 'while (<>) {print "##$_"}' < infile > outfile
-p
Przełącznik jest również przydatny: perl -pe 's/^/##/' infile > outfile
. (Istnieje również -i[extension]
przełącznik zastępowania pliku docelowego na miejscu.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Oto bash
sposób:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
( W bash
powłoce działa read -r
bez innych argumentów IFS= read -r REPLY
.)
Jest to zainspirowane stylistycznie przez rozwiązanie perla beav_35 , które, przyznaję, prawdopodobnie działa znacznie szybciej w przypadku dużych plików, ponieważ perl
można oczekiwać, że będzie bardziej wydajne niż powłoka, jeśli chodzi o przetwarzanie tekstu.
Oto łatwiejszy perl
sposób niż gdzie indziej:
perl -pi -e 'print "##"' YOURFILEHERE
To (ab) wykorzystuje fakt, że perl -p
drukuje linię po wykonaniu polecenia podanego w -e
.
Możesz używać Vima w trybie Ex:
ex -sc '%s/^/##/|x' file
%
wybierz wszystkie linie
s
zastąpić
x
Zapisz i zamknij
Można to zrobić za pomocą funkcji mapowania Pythona i przekierowania standardowego wejścia:
$ 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
Zapisz wynik w nowym pliku i użyj go zamiast oryginalnego
sed 's/^/##/' -i file
. W takim przypadku byłoby to preferowane, ponieważ nie może się nie udać. W innych przypadkach to polecenie można połączyć z,diff -u file.bak file
aby zobaczyć różnice (w razie potrzeby przeprowadź je przez rurkęless
). Jeśli okaże się, że działa, kopię zapasową można usunąć. W przeciwnym razie można go przywrócić za pomocą prostegomv file.bak file
.