Muszę skopiować zawartość pliku tekstowego i wkleić go do innego pliku tekstowego. Pierwszy plik tekstowy zawiera 10 wierszy danych i muszę je skopiować do drugiego pliku tekstowego, zaczynając od wiersza 5 (na przykład). Tak więc w drugim pliku tekstowym dane te należy zapisać od wiersza 5 do wiersza 14. Jak można tego dokonać? Z góry dziękuję. Uważaj mnie za debiutanta w kwestii Linuksa.
text-processing
G. Paschalis
źródło
źródło
(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt
Najłatwiejszym narzędziem może być tutaj
sed
. Aby wstawićb.txt
doa.txt
po 5 linii, można napisać:sed
czyta plik określony jako argument (a.txt
) wiersz po wierszu. Wszystkie linie są odtwarzane na wyjściu tak, jak pojawiały się na wejściu, chyba że zostaną zmienione przez polecenie.5
Jest adres (numer linii), w którym następujące polecenie zostanie wykonane. Poleceniem, którego używamy jestr
, który przyjmuje nazwę pliku jako argument (tutajb.txt
), czyta go całkowicie i wstawia do wyniku po bieżącym wierszu.Jak widać powyżej, ten
sed
wiersz poleceń wypisze tylko dane wyjściowe do terminala, bez zapisywania do żadnych plików. Możesz przekierować go do nowego pliku (nie do żadnego z plików wejściowych!), Używając przekierowania wyjściowego Basha:Albo można bezpośrednio modyfikować zewnętrznego pliku wejściowego
a.txt
przy użyciused
„s-i
(«in-place») przełącznika. Jeśli zapiszesz go jako-i.bak
, najpierw utworzy kopię zapasową oryginalnego pliku wejściowego z sufiksem.bak
:Przykład:
źródło
(Ponownie wykorzystując elegancki przykład z @ByteCommander :)
źródło