[Linux] Jak Usunąć Puste Wiersze z Pliku TXT?

0
367
Rate this post

Operacje na plikach tekstowych to jedne z najważniejszych czynności, które możemy wykonywać w systemie Linux. Jednym z częstych problemów, z którym możemy się spotkać, jest konieczność usunięcia pustych wierszy z pliku tekstowego. Oto kilka metod, za pomocą których możemy to zrobić.

Metoda 1: Użycie polecenia sed

sed to bardzo potężne narzędzie do przetwarzania tekstu w linii poleceń. Możesz użyć polecenia sed do usunięcia pustych wierszy w następujący sposób:

bash
sed '/^$/d' input.txt > output.txt

W tym przypadku, /^$/ to wyrażenie regularne, które pasuje do pustych wierszy, a d to polecenie usunięcia. Plik input.txt to plik, z którego chcemy usunąć puste wiersze, a output.txt to plik wynikowy.

Wersja w miejscu

Jeżeli chcesz zachować zmiany w oryginalnym pliku, możesz użyć flagi -i:

bash
sed -i '/^$/d' input.txt

Metoda 2: Użycie polecenia awk

awk to kolejne potężne narzędzie do przetwarzania tekstu. Polecenie to jest bardziej elastyczne i można je użyć w różnorodnych zastosowaniach. Oto jak usunąć puste wiersze z pliku tekstowego za pomocą awk:

bash
awk 'NF' input.txt > output.txt

W tym przypadku, NF oznacza „Number of Fields” (liczbę pól w wierszu). awk 'NF' wybiera tylko te wiersze, które mają co najmniej jedno pole (czyli nie są puste).

Wersja w miejscu

Niestety, awk nie posiada wbudowanej opcji do edycji plików „w miejscu”, ale możesz osiągnąć to w inny sposób:

bash
awk 'NF' input.txt > temp.txt && mv temp.txt input.txt

Metoda 3: Użycie polecenia grep

grep to kolejne narzędzie, które jest często używane do przeszukiwania tekstu. Możesz użyć grep do usunięcia pustych wierszy w pliku tekstowym w następujący sposób:

bash
grep -v '^$' input.txt > output.txt

Tu używamy flagi -v, która inwertuje dopasowanie, to znaczy wybiera tylko te wiersze, które nie pasują do wzoru. Wyrażenie ^$ dopasowuje puste wiersze.

Wersja w miejscu

Podobnie jak w przypadku awk, grep nie posiada wbudowanej opcji do edycji plików „w miejscu”. Ale można osiągnąć to w inny sposób:

bash
grep -v '^$' input.txt > temp.txt && mv temp.txt input.txt

Metoda 4: Użycie polecenia ex

Jeżeli jesteś użytkownikiem edytora Vim, być może zainteresuje Cię metoda wykorzystująca polecenie ex, które jest trybem komendowym Vima. Oto jak można to zrobić:

bash
ex -s +%g/^$/d -cwq input.txt

W tej komendzie %g/^$/d to polecenie, które usunie wszystkie puste wiersze. Opcje -cwq zamykają edytor po wykonaniu operacji.

Te metody to tylko początek tego, co możesz zrobić z plikami tekstowymi w systemie Linux. Każda z nich ma swoje wady i zalety, ale wszystkie są skuteczne w usunięciu pustych wierszy z plików tekstowych. Możesz wybrać tę, która najlepiej pasuje do Twojego przypadku. Jeżeli jesteś zainteresowany dalszymi możliwościami tych narzędzi, warto zapoznać się z ich dokumentacją, gdzie znajdziesz wiele przykładów i opcji.

Metoda 5: Użycie polecenia perl

Perl to kolejny potężny język skryptowy, który oferuje różne metody manipulacji tekstem. Możesz użyć jednolinijkowego skryptu w Perl, aby usunąć puste wiersze z pliku:

bash
perl -i -ne 'print if /\S/' input.txt

W tym przypadku, flaga -i oznacza edycję pliku „w miejscu”, a flaga -ne umożliwia przetwarzanie każdego wiersza pliku. Wyrażenie regularne \S dopasowuje się do każdego niebiałego znaku, dzięki czemu puste wiersze są pomijane.

Metoda 6: Użycie polecenia tr

Polecenie tr (translate) jest używane do zamiany lub usuwania znaków. Możemy je użyć w połączeniu z innymi poleceniami, jak awk czy sed, aby usunąć puste wiersze:

bash
cat input.txt | tr -s '\n' '\n' > output.txt

Flaga -s (squeeze) zastępuje każdą sekwencję podanego znaku (w tym przypadku znaku nowej linii \n) pojedynczym wystąpieniem tego znaku.

Metoda 7: Użycie skryptu bashowego

Jeżeli nie chcesz polegać na jednolinijkowcach, możesz również napisać prosty skrypt w Bashu, który zrobi to za Ciebie:

bash
#!/bin/bash
while IFS= read -r line; do
if [[ "$line" != "" ]]; then
echo "$line"
fi
done < input.txt > output.txt

Ten skrypt odczytuje plik input.txt wiersz po wierszu i zapisuje niepuste wiersze do pliku output.txt.

Metoda 8: Użycie Pythona

Dla tych, którzy są zaznajomieni z Pythonem, możliwe jest również napisanie krótkiego skryptu, który usunie puste wiersze:

python
with open("input.txt", "r") as infile, open("output.txt", "w") as outfile:
for line in infile:
if line.strip():
outfile.write(line)

Skrypt ten odczytuje plik input.txt i zapisuje wszystkie niepuste wiersze do pliku output.txt.

Każda z tych metod ma swoje zastosowania i najlepiej jest wybrać tę, która najbardziej odpowiada Twoim potrzebom. Usuwanie pustych wierszy to tylko jedna z wielu operacji, które można wykonać na plikach tekstowych w systemie Linux. Opanowanie tych narzędzi z pewnością zwiększy Twoją produktywność i umożliwi efektywniejszą pracę z danymi tekstowymi.

Metoda 9: Użycie edytora tekstu Vim

Jeżeli jesteś zaznajomiony z edytorem tekstu Vim, możesz wykonać to zadanie manualnie w kilku prostych krokach:

  1. Otwórz plik w Vimie używając komendy: vim input.txt.
  2. Wprowadź tryb komendowy naciskając :.
  3. Wpisz komendę: g/^$/d i naciśnij Enter.

Takie podejście daje Ci pełną kontrolę nad edycją i pozwala na podgląd zmian w czasie rzeczywistym.

Metoda 10: Użycie edytora tekstu Nano

Nano to inny popularny edytor tekstu dostępny w systemach Linux. Aby usunąć puste wiersze w Nano, wykonaj poniższe kroki:

  1. Otwórz plik komendą nano input.txt.
  2. Użyj funkcji wyszukiwania, naciskając Ctrl + W.
  3. Wprowadź wyrażenie regularne dopasowujące puste wiersze, np. ^$.
  4. Naciśnij Enter, a następnie Ctrl + K aby usunąć znaleziony wiersz.
  5. Powtórz kroki 3 i 4, aż usuniesz wszystkie puste wiersze.

W tym przypadku musisz wykonać operację dla każdego pustego wiersza, co może być czasochłonne dla dużych plików.

Metoda 11: Wykorzystanie kombinacji narzędzi

Niektóre zadania mogą wymagać kombinacji różnych narzędzi. Na przykład, możesz użyć awk do przefiltrowania pustych linii, a następnie sed do dodatkowego przetworzenia:

bash
awk 'NF' input.txt | sed 's/foo/bar/g' > output.txt

W tym przypadku, awk 'NF' usuwa puste linie, a sed 's/foo/bar/g' zamienia wszystkie wystąpienia „foo” na „bar”.

Metoda 12: Użycie własnego skryptu w języku C

Jeśli masz doświadczenie w programowaniu w języku C, możesz również napisać własny program, który usunie puste wiersze z pliku. Dzięki temu masz pełną kontrolę nad algorytmem i możesz zaimplementować dodatkowe funkcje, jeżeli tego potrzebujesz.

Dlaczego warto znać różne metody?

Znajomość różnorodnych narzędzi i metod usunięcia pustych wierszy z pliku tekstowego w systemie Linux jest ważna, ponieważ różne narzędzia mogą być bardziej efektywne w różnych sytuacjach. Niektóre narzędzia lepiej nadają się do prostych zadań, podczas gdy inne są bardziej elastyczne i potężne, ale mogą być trudniejsze w użyciu.

Usunięcie pustych wierszy to tylko jedno z wielu zastosowań tych narzędzi. Możesz ich użyć do sortowania danych, zamiany tekstu, ekstrakcji informacji i wiele więcej. Dlatego warto znać kilka różnych podejść, aby móc wybrać to, które najlepiej pasuje do Twojego konkretnego przypadku.