Jak usunąć określone linie z pliku za pomocą seda

W niektórych przypadkach musimy usunąć konkretną linię z pliku lub kilka, na przykład zdarzyło mi się, że mam całą listę plików i muszę usunąć wiersz # 27 z nich wszystkich (wiersz # 27 to lista ACL , norma, reguła, konfiguracja), mogę edytować plik po pliku lub po prostu osiągnąć to, czego potrzebuję, za pomocą polecenia sed i skrypt bash (opcjonalnie).

Ale spróbujmy trochę prostego pojedynczego pliku.

Mamy plik dystrybucja-deb.txt który zawiera:

debian

kubuntu

archlinux

solusy

mięta

To znaczy plik dystrybucja-deb.txt jest w którym umieścimy dystrybucje oparte na Debianie, ale widzimy, że w linii # 3 znajduje się „archlinux”, dystrybucja, która oczywiście nie ma nic wspólnego z Debianem, więc musimy wyeliminować tę linię. Aby wyeliminować trzecią linię tego pliku, umieścimy następujące:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Wyjaśnienie tego wiersza jest dość łatwe dzięki pragnienie „3d” wskazujemy, że usuniemy wiersz nr 3 za pomocą dystrybucja-deb.txt Wskazujemy, nad którym plikiem mamy pracować, to znaczy usuwamy wiersz nr 3 tego pliku, do tego momentu, jeśli naciśniemy Enter, pokaże nam, czego chcemy, ale w terminalu, więc z > dystrybucje-deb-ok.txt wskazujemy, że zamiast wyświetlać wynik w terminalu, umieścił go w pliku o tej nazwie.

Co jest proste?

Możemy również uniknąć używania > dystrybucje-deb-ok.txt używając odpowiedniego parametru sed, parametr -i

Oznacza to, że w przypadku, gdy chcemy usunąć linię z pliku i zapisać ją pod tą samą nazwą (a nie w innym pliku), po prostu dodaj parametr -i :

sed -i "3d" distros-deb.txt

Spowoduje to usunięcie wiersza nr 3 z pliku distros-deb.txt i zapisanie go.

A jeśli chcę zakresu linii, czyli usunięcia linii 3, ale także 4 i 5? Aby to osiągnąć, ustawiamy zakres od 3 do 5, czyli:

sed -i "3,5d" distros-deb.txt

I pokaże mi tylko debian i kubuntu 😀

A co, jeśli chcę usunąć linię od drugiej do ostatniej, kiedy nie znam wszystkich wierszy?

Wystarczy użyć symbolu dolara - »$

sed -i "2,$d" distros-deb.txt

W przypadku, gdy chcesz wyeliminować z pierwszej linii do # 4, po prostu umieszczamy wartość 1 na początku:

sed -i "1,4d" distros-deb.txt

To wszystko, bardzo przydatna wskazówka, gdy chcesz tworzyć skrypty bash do automatyzacji zadań i musisz zmodyfikować i wyeliminować linie plików konfiguracyjnych, aby zmodyfikować, możemy użyć sed o Perl, jak również wyeliminować, wiemy już, jak to zrobić za pomocą sed 😉

pozdrowienia


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   mss-rozwój powiedział

    Bardzo dobry wkład 😉

    1.    KZKG ^ Gaara powiedział

      Dziękuję

      Nawiasem mówiąc, właśnie otrzymaliśmy Twój e-mail, odpowiadam 😀

      pozdrowienia

  2.   bezimienny powiedział

    Jako arcykapłan terminala, serwerów i połączeń ssh przychodzę do ciebie, o wielki KZKG ^ Gaara, i pytam: gdzie mogę uzyskać poradnik na poziomie mojej ignorancji, który pozwala mi korzystać z połączeń ssh między dwoma zdalnymi maszynami w różnych sieciach, aby udostępniać pliki tekstowe, pdf, obraz i dźwięk (mp3)….

    🙂

    Poważnie, czy mógłbyś mnie poprowadzić w tym względzie, mam dwie maszyny, jedną w pracy i jedną w domu i potrzebuję między nimi połączenia ssh (bo jak rozumiem, ssh pozwala na udostępnianie treści między maszynami, mam rację?).
    A jeśli się mylę, jaką aplikację polecacie?
    A gdzie znajdę podstawowy poradnik na ten temat?

    1.    -spiker- powiedział

      scp

      scp user @ machine_address: ścieżka użytkownik @ machine_address: ścieżka.

      Taka sama składnia jak cp, źródło -> miejsce docelowe.

  3.   f3niX powiedział

    Pojawiłeś się człowieku, zgubiłeś się.

  4.   Joaquin powiedział

    Dobra wskazówka!

  5.   LycusHakerEmo powiedział

    Ciekawa wskazówka… xD

    Czy znasz taki, który wyróżnia pogrubiony tekst?
    Mam na myśli, że mam plik txt, który jest słownikiem, ma ponad 10000 linii i chcę, aby podświetlał pewien tekst przed punktami zawieszenia „:” i robienie tego jeden po drugim to za dużo.

    1.    KZKG ^ Gaara powiedział

      Cześć,

      Plik txt jest zwykłym tekstem, jak sugeruje jego nazwa ... zwykły, bez formatów lub czegoś podobnego, przepraszam, ale myślę, że to, o co prosisz, nie może być zrobione, prawda? 🙁

      pozdrowienia

      1.    aca powiedział

        w rzeczywistości może, ale musisz znać format docelowy.
        na przykład:
        echo $ (echo "Robert: Cześć. Zmień tutaj" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        to kwestia przetrwania.
        Innym sposobem usunięcia, którego można użyć, jest sed '/' $ 1 '/ d', ale musisz być pewien, że re.

        1.    LycusHakerEmo powiedział

          następnie zakończ zapisywanie w * .odt

          Czy nie ma prostszego sposobu na zrobienie tego z LibreOffice?

  6.   Lolo powiedział

    Czy mógłbyś usunąć część linii i zostawić resztę?

    Powiedzmy, że chcę usunąć wszystko, co znajduje się przed słowem w określonym wierszu.

    Lub usuń wszystko, co następuje po tym słowie.

    1.    aca powiedział

      Tak, to kwestia wyciągnięcia wyrażenia regularnego (w razie potrzeby man sed -r, –regexp-extended)
      Zaczynając od tego, co znalazłem
      echo «Robert: Witam. Zmień tutaj »| sed 's / Change //'
      z dobrze zdefiniowanym wzorem i z. (jeden znak) i * (więcej niż jeden)
      Po:
      echo «Robert: Witam. Zmień tutaj »| sed 's / Change. * //'
      Przed:
      echo «Robert: Witam. Zmień tutaj »| sed 's /. * Zmień //'
      Jeśli ma znaczenie, że słowo się pojawia
      echo «Robert: Witam. Zmień tutaj »| sed 's / Zmień. * / Zmień /'
      lub bardziej rozbudowane
      w wierszu zawierającym Robert, co następuje po Change
      echo -e «Fritz: Witam. Zmień tutaj \ nRobert: Witaj. Zmień tutaj »| sed '/Robert/s/Cambio.*//'
      lub tak jak na początku wyjmij drugą linię i przerób resztę
      echo -e «Fritz: Witam. Zmień tutaj \ nRobert: Witaj. Zmień tutaj \ nInne »| sed -e 2d -e 's / Change. * //'
      echo -e «Fritz: Witam. Zmień tutaj \ nRobert: Witaj. Zmień tutaj \ nInne »| sed '2d; s / Change. * //'

      1.    Lolo powiedział

        Dziękuję, jest to dla mnie bardzo przydatne.

  7.   msx powiedział

    Niezły artykuł, który mi się podoba, jak wspaniały SysAdmin!
    Czym byłoby nasze życie bez sed, awek, perl, grep, tail, head, "Emacs" i wielu innych niezbędnych narzędzi !?

  8.   Lisbeth Ollarves powiedział

    Dzięki, to było bardzo pomocne.

  9.   Szpilki powiedział

    Witam, a jak można usunąć z pliku linie 1,4 i 10 w tym samym poleceniu?