Jestem nowy w używaniu sed, ale eksperymentowałem z sedem s/..../..../
(zamiennikiem), aby zmodyfikować pełne zdanie, jeśli jest ono w jednym wierszu, ale nie jestem świadomy alternatywnego rozwiązania, w jaki sposób zmodyfikować zdanie, które mogło być rozdzielone w dwóch wierszach, takie jak:
To:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
jest napisane w następujący sposób:
Lorem Ipsum is simply dummy text of the
printing and typesetting industry.
Jak możesz to wykryć lub zakodować, aby zastąpić całe zdanie, nawet jeśli jest w dwóch wierszach zamiast w jednym?
command-line
sed
DᴀʀᴛʜVᴀᴅᴇʀ
źródło
źródło
Odpowiedzi:
Następujące polecenie będzie działać w obu sytuacjach:
Więcej wyjaśnień: Jak użyć seda do zastąpienia ciągu wieloliniowego?
źródło
sed
, niczym więcej. I to jest pytanie tytułowe. W tytule nie chodzi operl
.Lorem
znajduje się w ostatnim wierszu, defekt dzieli się z twoją wersją.)Chociaż sed może dopasowywać wzory na wielu liniach (za pomocą poleceń
N
lubH
dołączać kolejne linie przed dopasowaniem), jest to znacznie poza jego strefą komfortu. Spróbuj to tylko, jeśli lubisz ból.Perl potrafi ładnie robić takie rzeczy. Użyj
-p
przełącznika, aby przetwarzał standardowe dane wejściowe po jednym rekordzie i drukował zmodyfikowany rekord (à la sed), a-000
także włączał tryb akapitowy (gdzie rekordy są oddzielone pustymi wierszami). W wyrażeniu regularnym\s
pasuje do dowolnego znaku spacji, w tym nowego wiersza.Jeśli chcesz wstawić nowy wiersz w tekście zastępczym, gdy oryginał zawiera jeden wiersz, jest to bardziej skomplikowane. Jak to zrobić, zależy od twoich wymagań, gdzie umieścić nową linię.
źródło
sed
. Jest również oznaczonysed
, a nieperl
.sed nie może łatwo odczytać wielu wierszy. Użyj
perl -i -0pe 's/.../.../...'
zamiast tego.źródło
perl
jest dla Ciebie prostsze, nie oznacza to, żesed
rzadko warto.