SED: wstawić tekst po ostatnim wierszu?


76

Polecenie wstawia znacznik na początku pliku:

sed -i "1s/^/<?php /" file

Jak mogę wstawić coś na końcu każdego pliku za pomocą SED?


3
{ cat file; echo 'END OF FILE'; } > newFile , działa to również dzięki sh. *. (nie sed, ale działa i prosty)

4
prosty echo "Cool Text" >> filepowinien również załatwić sprawę.
Danpe

Odpowiedzi:


93

sed -e "\$aTEXTTOEND" jest najprostszym sposobem.

Jak to działa

$dopasowuje ostatni wiersz (jest to zwykły sedadres; 4aTEXTTOENDwstawiałby po czwartym wierszu), ajest poleceniem append i TEXTTOENDjest tym, co należy dołączyć.


Escape $ as $$ w pliku Makefile.
stevesliva

Dla OS X sed -e '$a\NEWLINE\\'. Zastąp NEWLINE rzeczywistą nową linią.
Jorge Bucaran

13
sed -i -e "\ $ aTEXTTOEND" <nazwa_pliku> będzie pełnym poleceniem.
Lasse Meyer

2
nie działa na macos. Nawet komentarz Jorge Bucaran: sed: 1: „$ a \ NEWLINE \\”: dodatkowe znaki po \ na końcu polecenia
Emanuele Paolini

1
W debian 9 dodaje nową linię zamiast dodawania na końcu ostatniej linii.
Luciano Andress Martini,

31

sedW takim przypadku nie trzeba używać . Co powiesz na

echo "<?php" >> file

2
To prawda, ale można się domyślać, że przypadek użycia OP to brak pliku w nawiasach „ <php ” i „ >” oraz cytowanie wybranych treści za jednym razem, więc prawdopodobnie naprawdę chce sedfragmentu.
dmckee,

2
Również jeśli to zrobisz i nie chcesz nowego wiersza, użyj echa -n
Vinko Vrsalovic

2
Nie lubię zgadywać. Za każdym razem, gdy próbuję, się mylę.

4
Innym powodem, dla którego przyjęta odpowiedź jest bardziej przydatna, jest jej wcześniejsze dodanie sudo, co powoduje, że ta odmiana kończy się niepowodzeniem, ponieważ echojest to wbudowane polecenie powłoki, a nie plik wykonywalny znaleziony w$PATH
Tony Cesaro

@TonyCesaro: echojest wbudowany, ale jest także plikiem wykonywalnym znalezionym w$PATH
Zan Lynx

24

Zakładając, że chcesz umieścić końcowy znacznik php w plikach

sed -i '$s/$/\n?>/' file

powinien załatwić sprawę


1
Działa to dobrze w przypadkach, gdy pożądana jest dowolna manipulacja ostatnim wierszem danych wejściowych. Dzięki!
Jay Taylor

Bardzo mile widziane byłoby rozłożone wyjaśnienie polecenia
GGhe


3

Użyj polecenia sed 'append (a)'. Na przykład, aby dodać dwa wiersze na końcu pliku:

sed -i -e '$a\
foo1 bar1\
foo2 bar2' file

2

W prosty sposób można pisać i wprowadzać zmiany w treści w określonym wierszu pliku. Jeśli chcesz wstawić cokolwiek pod określonym numerem linii, możesz użyć poniższego polecenia:

sed -i '2i i have started' sheikh.log

gdzie 2i- linia numer 2 i i oznacza wstawianie. Jeśli musisz wstawić w ostatnim wierszu, użyj $zamiast 2. zacząłem - tekst do wstawienia i sheikh.lognazwa pliku.

Możemy również wprowadzić zmiany w wierszu za pomocą poniższego polecenia

sed -i '2c we have started' sheikh.log

izmieniono na we.

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.