Odebírání znaků z řetězce v Bash

Removing Characters From String Bash

Někdy může být nutné odebrat znaky z řetězce. Ať už je důvod jakýkoli, Linux vám poskytuje různé vestavěné, praktické nástroje, které vám umožňují odstranit znaky z řetězce v Bash. Tento článek ukazuje, jak tyto nástroje použít k odebrání znaků z řetězce.

Tento článek popisuje, jak provést následující:



  • Odstraňte znak z řetězce pomocí sed
  • Odeberte znak z řetězce pomocí awk
  • Odstraňte znak z řetězce pomocí vyjmutí
  • Odstraňte znak z řetězce pomocí tr

Příkazy uvedené v tomto článku byly provedeny v Ubuntu 20.04 Focal Fossa. Stejné příkazy lze provádět i na jiných distribucích Linuxu, které mají k dispozici výše uvedené nástroje. Ke spouštění příkazů použijeme výchozí aplikaci Terminal. Do aplikace Terminal se dostanete pomocí klávesové zkratky Ctrl+Alt+T.



Odebrat znaky z řetězce pomocí sed

Sed je výkonný a praktický nástroj používaný k úpravě textových proudů. Jedná se o neinteraktivní textový editor, který vám umožňuje provádět základní manipulace s textem na vstupních tocích. Pomocí sed můžete také odstranit nežádoucí znaky z řetězců.



Pro demonstrační účely použijeme ukázkový řetězec a poté ho připojíme k příkazu sed.

Odebrat konkrétní řetězec z řetězce

Pomocí sed můžete z řetězce odebrat konkrétní znak. Chcete -li například odebrat h z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | sed 's/h //'

Tím odstraníte pouze první výskyt „h“ v řetězci.
Odebrat konkrétní znak z řetězce1
Chcete -li z řetězce odebrat všechny výskyty ‘h’, použijte následující příkaz:



$vyhodil 'Ahoj, jak se máš?' | sed 's/h // g'

Kde G znamená globální. Odstraní všechny výskyty „h“ v řetězci.
Odebrat konkrétní znak z řetězce 2

Odebrat první znak z řetězce

Odebrání prvního znaku z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | sed 's /^.//' soubor

Kde (.) Odpovídá přesně jednomu znaku a (^) odpovídá libovolnému znaku na začátku řetězce.
Odebrat první znak z řetězce

Odebrat poslední znak z řetězce

Odebrání posledního znaku z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | sed 's /.$//'

Kde ( . ) odpovídá přesně jednomu znaku a ($) odpovídá libovolnému znaku na konci řetězce.
Odebrat poslední znak z řetězce

Odebrat první a poslední znak z řetězce

Odebrání prvního a posledního znaku z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | sed 'S /^.//; s /.$//'

Odebrat první a poslední znak z řetězce

Odebrání znaků z řetězce pomocí awk

Awk je výkonný skriptovací jazyk používaný pro párování vzorů spolu se zpracováním textu. Awk vám umožňuje filtrovat a transformovat text různými způsoby. Pomocí awk můžete také odstranit znaky z řetězců.

Pro demonstrační účely použijeme ukázkový řetězec a poté ho připojíme k příkazu awk.

Odebrat první znak z řetězce

Odebrání prvního znaku z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | awk '{print substr ($ 0, 2)}'

Kde ($ 0) je celý cílový řetězec a (2) počáteční pozice znaku. Výše uvedený příkaz odstraní první znak „h“, číslo znaku „1“ a vrátí cílový řetězec začínající druhým znakem „e“.
Odebrat první znak z řetězce

Odstraňte první dva znaky z řetězce

Můžete také odebrat určitý počet znaků ze začátku řetězce. Chcete -li například odebrat první dva znaky z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | awk '{print substr ($ 0, 3)}'

Výše uvedený příkaz odstraní první dva znaky „on“ nebo čísla znaků „1 a 2“ a vrátí cílový řetězec začínající znakem číslo „3“ nebo „l“.
Odstraňte první dva znaky z řetězce

Odebrat poslední znak z řetězce

Odebrání posledního znaku z Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | awk '{print substr ($ 0, 1, length ($ 0) -1)}'

Kde délka ($ 0) -1 znamená odečíst ‘ 1 “Z celkové délky znaku.

Výše uvedený příkaz vytiskne řetězec začínající číslem znaku „ 1 ' až do délka ($ 0) -1 svléknout poslední znak.

Existují ' 19 ‘Znaky (včetně mezer) ve výše uvedeném řetězci. Příkaz bude fungovat tak, že vytiskne všechny znaky, počínaje znakem „ 1 'A podle charakteru' 18 „Při odstraňování posledního znaku“ 19 . ‘

rmv poslední znak frm řetězec

Odebrat z řetězce poslední dva znaky

Odebrání posledních dvou znaků z Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | awk '{print substr ($ 0, 1, length ($ 0) -2)}'

Kde délka ($ 0) -2 znamená odečíst ‘ 2 “Z celkové délky znaku.

Výše uvedený příkaz vytiskne řetězec začínající číslem znaku „ 1 “A do počtu znaků„ délka ($ 0) -2 , ‘, Čímž odstraníte poslední dva znaky v řetězci.
Odebrat z řetězce poslední dva znaky

Odeberte z řetězce první i poslední znak

Odebrání prvního a posledního znaku z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | awk '{print substr ($ 0, 2, length ($ 0) - 2)}'

Kde délka ($ 0) -2 znamená odečíst ‘ 2 “Z celkové délky znaku.

Výše uvedený příkaz vytiskne řetězec začínající číslem znaku „ 2 „Až do čísla postavy“ délka ($ 0) -2 , ‘Pro odstranění prvního a posledního znaku.

Odeberte z řetězce první i poslední znak

Odebrat znak z řetězce pomocí střihu

Vyjmout je nástroj příkazového řádku běžně používaný k extrahování části textu z řetězce nebo souboru a tisk výsledku na standardní výstup. Tento příkaz můžete také použít k odebrání znaků z řetězce.

Pro demonstrační účely použijeme ukázkový řetězec a poté ho připojíme k příkazu cut.

Odebrat první znak z řetězce

Chcete -li odstranit první znak z řetězce, Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | střih -C 2-

Tento příkaz vytiskne řetězec počínaje druhým znakem a odebere první znak.
rmv cut -c

Odeberte z řetězce první čtyři znaky

Odebrání prvních čtyř znaků z řetězce Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | střih -C 5-

Tento příkaz vytiskne řetězec počínaje pátým znakem a odstraní první čtyři znaky.
Odeberte z řetězce první čtyři znaky

Tisk řetězce mezi 2. a 5. znakem

Chcete -li vytisknout řetězec Ahoj, jak se máš? mezi druhým a pátým znakem , příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | střih -C 2-5

Tento příkaz vytiskne řetězec, počínaje druhým znakem a až po pátý znak, přičemž odstraní zbývající počáteční a koncové znaky.
rmv 2. a 5. c2

Odebrat poslední znak z řetězce

Odebrání posledního znaku z řetězce Ahoj, jak se máš? použijte střih příkaz pomocí rev , jak následuje:

$vyhodil 'Ahoj, jak se máš?' | rev | střih -c2- | rev

Tento příkaz funguje tak, že nejprve obrátíte řetězec, poté vyjmete první znak a nakonec jej obrátíte znovu, abyste získali požadovaný výstup.
02 Odebrat poslední znak z řetězce

Odebrat z řetězce poslední čtyři znaky

Odebrání posledních čtyř znaků z řádku Ahoj, jak se máš? příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | rev | střih -c5- | rev

Tento příkaz funguje tak, že nejprve obrátíte řetězec, poté vyjmete první čtyři znaky a poté jej obrátíte znovu, abyste získali požadovaný výstup.
rmv poslední čtyři znaky

Odstraňte první a poslední znak z řetězce

Odebrání prvního a posledního znaku z řetězce Ahoj, jak se máš? použijte střih příkaz pomocí rev , jak následuje:

$vyhodil 'Ahoj světe!' | střih -c2- | rev | střih -c2- |rev

Tento příkaz funguje tak, že odstřihnete první znak, poté obrátíte řetězec a odříznete jeho první znak a poté jej obrátíte znovu, abyste získali požadovaný výstup.
rmv první a poslední

Odebrat znak z řetězce pomocí tr

Příkaz tr (zkratka pro překlad) slouží k překladu, mačkání a mazání znaků z řetězce. Můžete také použít tr k odebrání znaků z řetězce.

Pro demonstrační účely použijeme ukázkový řetězec a poté ho připojíme k příkazu tr.

Odstraňte všechny výskyty znaků

Pomocí příkazu tr můžete z řetězce odebrat všechny výskyty malých nebo velkých znaků. Chcete -li například z řetězce odebrat všechny výskyty malých písmen „h“, bude příkaz následující:

$vyhodil 'Ahoj, jak se máš?' | NS -dh

odstranit všechny výskyty 01

Podobně pro odstranění všech výskytů velkých písmen „H“ z řetězce by příkaz byl:

$vyhodil 'Ahoj, jak se máš?' | NS -dH

K odstranění malých nebo velkých písmen můžete také použít interpretované sekvence:

$vyhodil 'Ahoj, jak se máš?'| NS -d [:horní:]

výskyty nižší

$vyhodil 'Ahoj, jak se máš?'| NS -d [:dolní:]

výskyty horní

Odstraňte všechny výskyty malých a velkých znaků

Z řetězce můžete také odebrat všechny výskyty malých i velkých znaků. Následující příkaz například odstraní všechny výskyty znaku „h“, a to jak malá, tak velká písmena.

$vyhodil 'Ahoj, jak se máš?' | NS -d'HH'

výskyty horní a dolní

Odstraňte všechny výskyty znaků v určitém rozsahu

Chcete-li odstranit všechny výskyty znaků z řetězce v konkrétním rozsahu „d-h“, příkaz by byl:

$vyhodil 'Ahoj, jak se máš?' | NS -d 'd-h'

Tento příkaz odstraní v řetězci všechny znaky v rozsahu „d-h“ (d, e, f, g, h).
výskyt specifický rozsah

Závěr

V Linuxu bude vždy existovat více než jeden způsob, jak provést jednoduchou práci. Totéž platí pro odstraňování znaků z řetězce. Tento článek vám ukázal čtyři různé způsoby, jak toho dosáhnout, spolu s několika příklady odstranění nežádoucích znaků z řetězce. Rozhodnutí, který nástroj použít, závisí na vašich preferencích a hlavně na tom, čeho chcete dosáhnout.