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?

don_crissti
źródło
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ć.

sprzedawca
źródło
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
innaM
źródło
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ę

Vinko Vrsalovic
źródło
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
użytkownik2802945
źródło
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.

szejk Mohammed Abdulla
źródło