Sed Zastąp znak nowej linii spacją

Sed Zastap Znak Nowej Linii Spacja



W systemie UNIX/Linux polecenie sed jest dedykowanym narzędziem do edycji strumieni. Może wykonywać różne operacje na strumieniu tekstowym, takie jak wyszukiwanie, znajdowanie i zastępowanie oraz wstawianie/usuwanie. Jednak w większości przypadków sed służy do wyszukiwania i zastępowania treści tekstowych.

W tym przewodniku pokażemy zastępowanie nowych linii spacją za pomocą sed.

Używanie sed do zastępowania tekstu

Najpierw przyjrzyjmy się szybkiemu wykonywaniu podstawowego wyszukiwania i zamiany za pomocą sed. Ta sama metoda zostanie zastosowana przy zastępowaniu znaków nowej linii spacjami z kilkoma dodatkowymi opcjami. Struktura poleceń jest następująca:







$ sed -e 's///'

Spójrz na następujące polecenie:



$ echo 'szybki brązowy lis' | sed -e 's/szybko/szybko/g'



Polecenie echo wypisuje ciąg do WYJŚCIE . Strumień STDOUT jest wtedy potok do sed. Poleciliśmy sedowi zamienić każdą instancję quick na szybkie. Ostatecznie dane wyjściowe są drukowane na ekranie.





Zastępowanie nowych linii spacją

W celach demonstracyjnych stworzyłem następujący plik tekstowy test.txt z kilkoma fikcyjnymi treściami:

$kot test.txt



Polecenie sed akceptuje wyrażenia regularne do opisywania różnych wzorców. Korzystając z tej funkcji, opiszemy nowy wiersz jako \n. Spróbujmy zastąpić znaki nowej linii białymi znakami:

$ sed -e 's/\n/ /g' test.txt

Jednak to nie działało zgodnie z oczekiwaniami. Aby osiągnąć ten cel, potrzebujemy kilku dodatkowych opcji. Spójrz na następujące polecenie:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

Polecenie sed ma wiele sekcji; każdy oznacza określone zadanie:

  • :a: Tworzy etykietę „a”
  • N: Dołącza następną linię do przestrzeni wzoru
  • $!ba: Jeśli nie ostatnia linia, powraca do etykiety „a”
  • s/\n/ /g: Znajduje i zastępuje znak nowej linii (\n) spacją (/ /). Wzorzec jest dopasowywany globalnie (/g)

Polecenie sed przechodzi przez kolejne kroki aż do ostatniego wiersza, zastępując wszystkie znaki \n spacją.

Zamiast tego złożonego polecenia, możemy uprościć sprawę, używając flagi -z, która określa, że ​​sed pracuje z rekordami oddzielonymi wartościami null. Polecenie wyglądałoby tak:

$ sed -z -e 's/\n/ /g' test.txt

Metody alternatywne

Chociaż sed poradzi sobie z tym zadaniem całkiem dobrze, istnieje kilka alternatywnych narzędzi. W tej sekcji pokrótce przyjrzymy się kilku z nich.

W poniższym przykładzie możemy użyć polecenia tr, aby w prosty sposób zastąpić znak nowej linii białymi znakami:

$ tr '\n' ' ' < test.txt

Do wykonania zadania możemy również użyć perla. Poniższa składnia jest również podobna do tej, której używaliśmy w sed (ale uproszczona):

$ perl -p -e 's/\n/ /' test.txt

Innym sposobem na zastąpienie nowych linii białymi znakami jest użycie polecenia wklejania. Zauważ, że może usunąć tylko jeden znak:

$ paste -s -d ' ' test.txt

Podobnie jak sed, Linux zawiera jeszcze jedno narzędzie awk. Podobnie jak sed, może również dokonywać zaawansowanych podmian na wejściu. Do naszego celu użyj następującego polecenia awk:

$ awk 1 ORS=' ' test.txt

Wniosek

W tym przewodniku zbadaliśmy, jak za pomocą sed możemy zastąpić znak nowej linii spacją. Osiągnięto to na dwa różne sposoby. Ten przewodnik zawiera również inne odpowiednie narzędzia, których możemy użyć do zastąpienia nowej linii białymi znakami.

Zamiast używać skomplikowanych poleceń, które są trudne do zapamiętania, używamy skryptów Bash do wykonywania wielu rzeczy w Linuksie. Chociaż odbywa się to kosztem pewnej wydajności, elastyczność i użyteczność są tego warte. Dowiedz się więcej o Skrypty Bash dla początkujących .