Dodaj ## do każdej linii w pliku tekstowym


30

Chcę dodać skróty do wszystkich linii w zwykłym pliku tekstowym. Nie przeszkadza mi zarówno korzystanie z terminala, jak i GUI - po prostu muszę to zrobić.

Odpowiedzi:


50

Możesz użyć seddo tego:

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

Zastępuje to początek wiersza ( ^) znakiem ##.

Za pomocą -i.bakprzełącznika sededytuje plik w miejscu, ale tworzy kopię zapasową z rozszerzeniem .bak.


1
+1 To jest pierwsza metoda tworzenia kopii zapasowych. I zawsze było inline zastąpić bezpośrednio: 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 fileaby 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ą prostego mv file.bak file.
Lekensteyn,

1
Elegancki. Myślałem o czymś takim sed 's/^\(.*\)$/##\1/', ale jest to o wiele ładniejsze.
umów się

Fajny ... Myślałem o tym, żeby zasugerować Vimowi ...
Sathish,

Pomogło mi to przekonwertować plik listy bloków :) Dziękuję 1+
Neil


6

Podczas gdy jesteśmy przy tym:

gawk -i inplace '{print "##"$0}' infile

Wykorzystuje (stosunkowo nową) wtyczkę edycyjną dla GNU awk 4.1.0+.


4

Oto bashsposób:

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

( W bashpowłoce działa read -rbez 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ż perlmożna oczekiwać, że będzie bardziej wydajne niż powłoka, jeśli chodzi o przetwarzanie tekstu.


3

sed -inie jest standardem POSIX, więc jeśli jesteś purystą, będziesz chciał użyć ed:

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

3

Oto łatwiejszy perlsposób niż gdzie indziej:

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

To (ab) wykorzystuje fakt, że perl -pdrukuje linię po wykonaniu polecenia podanego w -e.


0

Możesz używać Vima w trybie Ex:

ex -sc '%s/^/##/|x' file
  1. % wybierz wszystkie linie

  2. s zastąpić

  3. x Zapisz i zamknij


0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.