Usuwanie znaków z ciągu w Bash

Removing Characters From String Bash



Czasami może być konieczne usunięcie znaków z ciągu. Bez względu na powód, Linux zapewnia różne wbudowane, przydatne narzędzia, które pozwalają usuwać znaki z ciągu znaków w Bash. W tym artykule pokazano, jak używać tych narzędzi do usuwania znaków z ciągu.

W artykule opisano, jak wykonać następujące czynności:







  • Usuń znak z ciągu za pomocą sed
  • Usuń znak z łańcucha za pomocą awk
  • Usuń znak z ciągu za pomocą cięcia
  • Usuń znak z ciągu za pomocą tr

Polecenia przedstawione w tym artykule zostały wykonane w Ubuntu 20.04 Focal Fossa. Te same polecenia można również wykonać w innych dystrybucjach Linuksa, w których dostępne są powyższe narzędzia. Do uruchamiania poleceń użyjemy domyślnej aplikacji Terminal. Dostęp do aplikacji Terminal można uzyskać za pomocą skrótu klawiaturowego Ctrl + Alt + T.



Usuń znaki z ciągu za pomocą sed

Sed to potężne i poręczne narzędzie służące do edycji strumieni tekstu. Jest to nieinteraktywny edytor tekstu, który umożliwia wykonywanie podstawowych manipulacji tekstem na strumieniach wejściowych. Możesz także użyć sed do usunięcia niechcianych znaków z łańcuchów.



W celach demonstracyjnych użyjemy przykładowego ciągu, a następnie prześlemy go do polecenia sed.





Usuń określony znak z ciągu

Używając sed, możesz usunąć określony znak z ciągu. Na przykład, aby usunąć h z łańcucha Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | sed 'CII//'

Spowoduje to usunięcie tylko pierwszego wystąpienia „h” w ciągu.
Usuń określony znak z ciągu1
Aby usunąć wszystkie wystąpienia „h” z ciągu, użyj następującego polecenia:



$wyrzucił 'Witam, jak się masz?' | sed 's/h//g'

Gdzie g oznacza globalny. Usunie wszystkie wystąpienia „h” w ciągu.
Usuń określony znak z String2

Usuń pierwszy znak z ciągu

Aby usunąć pierwszy znak z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | sed 's/^.//' plik

Gdzie (.) dopasowuje dokładnie jeden znak, a (^) dopasowuje dowolny znak na początku ciągu.
Usuń pierwszy znak z ciągu

Usuń ostatni znak z ciągu

Aby usunąć ostatni znak z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | sed 's/.$//'

Gdzie ( . ) dopasowuje dokładnie jeden znak, a ($) dopasowuje dowolny znak na końcu ciągu.
Usuń ostatni znak z ciągu

Usuń pierwszy i ostatni znak z ciągu

Aby usunąć pierwszy i ostatni znak z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | sed 's /^.//; s /.$//'

Usuń pierwszy i ostatni znak z ciągu

Usuń znaki z ciągu za pomocą awk

Awk to potężny język skryptowy używany do dopasowywania wzorców wraz z przetwarzaniem tekstu. Awk umożliwia filtrowanie i przekształcanie tekstu na różne sposoby. Możesz także użyć awk do usunięcia znaków z łańcuchów.

W celach demonstracyjnych użyjemy przykładowego ciągu, a następnie prześlemy go do polecenia awk.

Usuń pierwszy znak z ciągu

Aby usunąć pierwszy znak z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | awk '{ print substr( $0, 2 ) }'

Gdzie ($0) to cały łańcuch docelowy, a (2) to pozycja początkowa znaku. Powyższe polecenie usuwa pierwszy znak „h”, znak numer „1” i zwraca ciąg docelowy zaczynający się od drugiego znaku „e”.
Usuń pierwszy znak z ciągu

Usuń pierwsze dwa znaki z ciągu

Możesz także usunąć określoną liczbę znaków z początku ciągu. Na przykład, aby usunąć pierwsze dwa znaki z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | awk '{ print substr (0, 3 ) }'

Powyższe polecenie usunie pierwsze dwa znaki „he” lub znaki o numerach „1 i 2” i zwróci docelowy ciąg rozpoczynający się od znaku o numerze „3” lub „l”.
Usuń pierwsze dwa znaki z ciągu

Usuń ostatni znak z ciągu

Aby usunąć ostatni znak z Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | awk '{ print substr( $0, 1, length($0)-1 ) }'

Gdzie długość (0 USD)-1 oznacza odliczenie ‘ 1 ’ od całkowitej długości znaków.

Powyższe polecenie wyświetli ciąg rozpoczynający się od znaku numer ‘ 1 ' aż do długość (0 USD)-1 usunąć ostatni znak.

Są ' 19 ’ znaków (włącznie ze spacjami) w powyższym ciągu. Polecenie zadziała, drukując wszystkie znaki, zaczynając od znaku ‘ 1 ’ i do znaku ‘ 18 ,’ usuwając ostatni znak ‘ 19 . ”

rmv ostatni znak z łańcucha

Usuń ostatnie dwa znaki z ciągu

Aby usunąć dwa ostatnie znaki z Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | awk '{ print substr( $0, 1, length($0)-2 ) }'

Gdzie długość (0 USD)-2 oznacza odliczenie ‘ 2 ’ od całkowitej długości znaków.

Powyższe polecenie wyświetli ciąg, zaczynając od znaku numer ‘ 1 ’ i do liczby znaków ‘ długość (0 USD)-2 ,’, aby usunąć ostatnie dwa znaki z ciągu.
Usuń ostatnie dwa znaki z ciągu

Usuń zarówno pierwsze, jak i ostatnie znaki z ciągu

Aby usunąć zarówno pierwszy, jak i ostatni znak z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | awk '{print substr($0, 2, length($0) - 2)}'

Gdzie długość (0 USD)-2 oznacza odliczenie ‘ 2 ’ od całkowitej długości znaków.

Powyższe polecenie wyświetli ciąg, zaczynając od znaku numer ‘ 2 ’ do liczby znaków ‘ długość (0 USD)-2 ”, aby usunąć pierwszy i ostatni znak.

Usuń zarówno pierwsze, jak i ostatnie znaki z ciągu

Usuń znak z ciągu za pomocą cięcia

Wytnij to narzędzie wiersza polecenia powszechnie używane do wyodrębniania części tekstu z ciągu lub pliku i drukowania wyniku na standardowym wyjściu. Możesz również użyć tego polecenia do usuwania znaków z ciągu.

W celach demonstracyjnych użyjemy przykładowego ciągu, a następnie prześlemy go do polecenia cut.

Usuń pierwszy znak z ciągu

Aby usunąć pierwszy znak z ciągu, Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | skaleczenie -C 2-

To polecenie wypisze ciąg, zaczynając od drugiego znaku, usuwając pierwszy znak.
rmv cut -c

Usuń pierwsze cztery znaki z ciągu

Aby usunąć pierwsze cztery znaki z ciągu Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | skaleczenie -C 5-

To polecenie wypisze ciąg, zaczynając od piątego znaku, usuwając pierwsze cztery znaki.
Usuń pierwsze cztery znaki z ciągu

Drukuj ciąg od 2 do 5 znaków

Aby wydrukować ciąg Witam, jak się masz? między drugim a piątym znakiem , polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | skaleczenie -C 2-5

To polecenie wypisze ciąg, zaczynając od drugiego znaku aż do piątego znaku, usuwając pozostałe znaki początku i końca.
rmv 2 i 5 c2

Usuń ostatni znak z ciągu

Aby usunąć ostatni znak z ciągu Witam, jak się masz? Użyj skaleczenie polecenie z obrót silnika , w następujący sposób:

$wyrzucił 'Witam, jak się masz?' | obrót silnika | skaleczenie -c2- | obrót silnika

To polecenie działa najpierw odwracając ciąg, następnie wycinając pierwszy znak, a na końcu odwracając go ponownie, aby uzyskać pożądany wynik.
02Usuń ostatni znak z ciągu

Usuń ostatnie cztery znaki z ciągu

Aby usunąć ostatnie cztery znaki z wiersza Witam, jak się masz? polecenie byłoby:

$wyrzucił 'Witam, jak się masz?' | obrót silnika | skaleczenie -c5- | obrót silnika

To polecenie działa najpierw odwracając ciąg, a następnie wycinając pierwsze cztery znaki, a następnie odwracając go ponownie, aby uzyskać żądany wynik.
rmv ostatnie cztery znaki

Usuń pierwsze i ostatnie znaki z ciągu

Aby usunąć pierwszy i ostatni znak z ciągu Witam, jak się masz? Użyj skaleczenie polecenie z obrót silnika , w następujący sposób:

$wyrzucił 'Witaj świecie!' | skaleczenie -c2- | obrót silnika | skaleczenie -c2- |obrót silnika

To polecenie działa poprzez wycięcie pierwszego znaku, a następnie odwrócenie ciągu i wycięcie jego pierwszego znaku, a następnie ponowne odwrócenie, aby uzyskać pożądany wynik.
rmv pierwszy i ostatni

Usuń znak z ciągu za pomocą tr

Polecenie tr (skrót od translate) służy do tłumaczenia, ściskania i usuwania znaków z łańcucha. Możesz także użyć tr, aby usunąć znaki z łańcucha.

W celach demonstracyjnych użyjemy przykładowego ciągu, a następnie prześlemy go do polecenia tr.

Usuń wszystkie wystąpienia postaci

Używając tr polecenie, możesz usunąć wszystkie wystąpienia małych lub wielkich liter z ciągu. Na przykład, aby usunąć wszystkie wystąpienia małej litery „h” z ciągu, polecenie powinno wyglądać tak:

$wyrzucił 'Witam, jak się masz?' | NS -Dh

usuń wszystkie zdarzenia 01

Podobnie, aby usunąć wszystkie wystąpienia wielkiej litery „H” z ciągu, polecenie powinno wyglądać tak:

$wyrzucił 'Witam, jak się masz?' | NS -Dh

Możesz także użyć zinterpretowanych sekwencji, aby usunąć małe lub wielkie litery:

$wyrzucił 'Witam, jak się masz?'| NS -D [:górny:]

zdarzenia niższe

$wyrzucił 'Witam, jak się masz?'| NS -D [:niżej:]

zdarzenia górne

Usuń wszystkie wystąpienia małych i wielkich znaków

Możesz również usunąć z ciągu wszystkie wystąpienia zarówno małych, jak i wielkich liter. Na przykład poniższe polecenie usunie wszystkie wystąpienia znaku „h”, zarówno małych, jak i wielkich liter.

$wyrzucił 'Witam, jak się masz?' | NS -D„hH”

zdarzenia górne i dolne

Usuń wszystkie wystąpienia znaków w określonym zakresie

Aby usunąć wszystkie wystąpienia znaków z ciągu w określonym zakresie „d-h”, polecenie powinno wyglądać tak:

$wyrzucił 'Witam, jak się masz?' | NS -D „d-h”

To polecenie usunie wszystkie znaki z zakresu „d-h” (d,e,f,g,h) w ciągu.
określony zakres zdarzeń

Wniosek

W Linuksie zawsze będzie więcej niż jeden sposób na wykonanie prostej pracy. To samo dotyczy usuwania znaków z ciągu. W tym artykule pokazano cztery różne sposoby, jak to zrobić, wraz z kilkoma przykładami usuwania niechcianych znaków z ciągu. Decyzja, którego narzędzia użyć, zależy od Twoich preferencji i, co ważniejsze, od tego, co chcesz osiągnąć.