Utknąłem w włączaniu wyrażeń regularnych z poleceniem sed.
P: Chcę zastąpić wszystkie wystąpienia dwóch spacji po końcu zdania tylko jedną spacją.
Oto co zrobiłem:
sed 's/^ $/^$/' file
I nie zastąpił dwóch spacji jedną spacją po zakończeniu zdania.
Otrzymuję wynik:
This is the output. Hello Hello
Chcę wynik:
This is the output. Hello Hello
text-processing
sed
Zeus
źródło
źródło
Odpowiedzi:
zamień kropkę, a następnie dwie lub więcej spacji kropką, a następnie pojedynczą spacją
źródło
sed -r 's/\.\s+/. /g' file
z GNU sed ...sed -E
zamiastsed -r
. Działa to z GNU sed i * BSD sed (w tym Mac OS X) i niektórymi innymi. Planowane jest włączenie go jako standardu do POSIX „już wkrótce”.sed -E
komuś na tej stronie, który nie działał, alesed -r
działał. Pracowałem sam z GNU sed, więc nie mam pojęcia o POSIX i innych odmianach. Spróbuję dołączyć ten szczegół w przyszłości , dzięki :)-E
od dłuższego czasu (od co najmniej 2011 r., Ale strony podręcznika i strony informacyjne wciąż tylko wspominają-r
)Twoje
sed
polecenie's/^ $/^$/'
nie zrobi tego, co chcesz. Po prostu zamień wszystkie linie zawierające jedną spację linią zawierającą^$
.W zależności od tego, jakie znaki oznaczają koniec zdania, możesz:
Spowoduje to zastąpienie 2 lub więcej spacji po
.
,?
lub!
tylko z jednej przestrzeni.źródło
sed -r 's/([.?!])\s+/\1 /g' file
sed
skrypt edycyjny zastąpi dowolny wiersz zawierający jedną spację literalnym ciągiem znaków^$
.Tego możesz szukać,
Próba,
Za pomocą
sed
,źródło