Zawartość mojego filename
pliku jest następująca (na przykład):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
Chcę zastąpić blok wierszy między START
i END
tylko jednym słowem, na przykład słowem SINGLEWORD
. Jak poniżej:
My block of line starts from here
SINGLEWORD
and end to here for example.
Za pomocą tego polecenia mogę znaleźć mój blok linii:
grep -Pzo "START(.|\n)*END" filename
A wynik uruchomienia powyższej komendy będzie taki:
START
First line
second line
third line
END
Następnie użyłem tego polecenia, aby połączyć wszystkie linie w jedną linię:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Wtedy uzyskam ten wynik:
START First line second line third line END
I moim ostatnim poleceniem LAST_RESULTS | sed 's/.*/SINGLEWORD/'
zmieniam je na "SINGLEWORD"
i otrzymuję ten wynik.
SINGLEWORD
Teraz chcę: Jak mogę użyć tego polecenia (lub polecenia sugestii) i zastąpić (w miejscu) mój blok wierszy słowem „POJEDYNCZE”? Ostateczny wynik będzie podobny do tego pliku:
My block of line starts from here
SINGLEWORD
and end to here for example.
źródło
sed
powinno być możliwe, ale prawdopodobnie trudniejsze do odczytania (Spójrz na to pytanie )/
,*
,?
) w tym i to tylko przykład. i czy mógłbyś wyjaśnić swoje polecenie?sed
):\/
,\*
,\?
perl -i -p0e 's/\/\*.*?\*\//SINGLEWORD/sm'
. Powinno działaćZastanawiałem się, czy jest to możliwe bez
perl
,python
i inni. I znalazłem to rozwiązanie za pomocąsed
:Wyjaśnienie:
/START.*END/
przezSINGLEWORD
, / g globalnej meczu (tyle razy, ile to możliwe)Znaleziono tutaj .
@KasiyA, dziękuję Nauczyłem się wielu ciekawych rzeczy!
źródło