Chciałbym sed
tylko ostatni wzór dopasowania pliku tekstowego.sed tylko ostatni wzór dopasowania
plik wejściowy:
boy
boy
girl
boy
plik wyjściowy:
boy
boy
girl
boys
Chciałbym sed
tylko ostatni wzór dopasowania pliku tekstowego.sed tylko ostatni wzór dopasowania
plik wejściowy:
boy
boy
girl
boy
plik wyjściowy:
boy
boy
girl
boys
Jednym ze sposobów byłoby odwrócić plik wymienić tylko pierwszy mecz, a następnie odwrócić go z powrotem.
tac <file> | sed '1 s/boy/boys/' | tac | sponge <newfile>
tac będzie "łączyć i drukować pliki w odwrotnej kolejności". gąbka "wchłonie standardowe wejście i zapisze w pliku". Jest w pakiecie "moreutils" na debian.
Jakie są zalety instalacji do 'gąbki' w porównaniu z' tac> newfile'? Wadą, jeśli dane są duże, jest to, że istnieje dodatkowa rura, do której dane muszą być kopiowane i usuwane, co spowalnia działanie. –
Po prostu to, do czego dążyły moje palce, ponieważ naprawdę myślałem o problemie. To nie jest solidne, uniwersalne rozwiązanie, udzielę ci. – chooban
Wszystko czego potrzebujesz to $
:
sed '$s/boy/boys/'
Załóżmy, że po "chłopcu" była kolejna "dziewczyna"? Działa to na konkretnych przykładowych danych, ale nie bardziej ogólnie. –
To może pracować dla Ciebie (GNU sed):
sed '1h;1!H;$!d;x;s/.*boy/&s/' file
Slurp plik do pamięci i zastąpić ostatnie wystąpienie pożądanego ciąg przy użyciu chciwość .
Alternatywny, mniej intensywnie wykorzystujących pamięć rozwiązanie:
sed '/.*boy/,$!b;//{x;//p;x;h};//!H;$!d;x;s//&s/' file
ta wykorzystuje przestrzeń przytrzymaj, aby utrzymać dotychczasowe linie zawierające żądany ciąg i rzuca je, gdy nowy Występowanie wymaganej napotkaniu napisu. Na końcu pliku ostatnie wystąpienie znajduje się w przestrzeni przytrzymania i jest modyfikowane.
http://stackoverflow.com/questions/17114807/sed-replace-last-line-matching-pattern –