Někdy budete možná muset odstranit 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žní odstranit znaky z řetězce v Bash. Tento článek ukazuje, jak pomocí těchto nástrojů odstranit znaky z řetězce.
Článek popisuje, jak provést následující:
- Odebrat znak z řetězce pomocí sed
- Odebrat znak z řetězce pomocí awk
- Odstraňte znak z řetězce pomocí řezu
- Odebrat znak z řetězce pomocí tr
Příkazy zobrazené v tomto článku byly provedeny v systému 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 spuštění příkazů použijeme výchozí aplikaci Terminál. K aplikaci Terminál můžete přistupovat pomocí klávesové zkratky Ctrl + Alt + T.
Odebrat znaky z řetězce pomocí sed
Sed je výkonný a užitečný nástroj, který se používá k úpravám proudů textu. Jedná se o neinteraktivní textový editor, který umožňuje provádět základní manipulace s textem na vstupních proudech. Můžete také použít sed k odstranění nežádoucích znaků z řetězců.
Pro demonstrační účely použijeme ukázkový řetězec a poté jej připojíme k příkazu sed.
Odebrat konkrétní znak z řetězce
Pomocí sed můžete odstranit určitý znak z řetězce. Například odstranit „h“ z řetězce „Ahoj, jak se máš?„Příkaz by byl:
$ echo "ahoj, jak se máš??"| sed 's / h //'Tím se odstraní pouze první výskyt 'h' v řetězci.
Chcete-li z řetězce odstranit všechny výskyty 'h', použijte následující příkaz:
Kde G znamená globální. Odstraní všechny výskyty 'h' v řetězci.
Odebrat první znak z řetězce
Odebrání prvního znaku z řetězce “Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| sed / s.// 'souborKde (.) odpovídá přesně jednomu znaku a (^) odpovídá libovolnému znaku na začátku řetězce.
Odebrat poslední znak z řetězce
Odebrání posledního znaku z řetězce “Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| sed /.$ // 'Kde (.) odpovídá přesně jednomu znaku a ($) odpovídá libovolnému znaku na konci ř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:
$ echo "ahoj, jak se máš??"| sed / s.//; s /.$ // '
Odebrat znaky z řetězce pomocí awk
Awk je výkonný skriptovací jazyk používaný pro porovnávání vzorů spolu se zpracováním textu. Awk umožňuje filtrovat a transformovat text různými způsoby. Můžete také použít awk k odstranění znaků z řetězců.
Pro demonstrační účely použijeme ukázkový řetězec a poté jej 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:
$ echo "ahoj, jak se máš??"| awk 'print substr ($ 0, 2)'Kde ($ 0) je celý cílový řetězec a (2) je počáteční pozice znaků. Výše uvedený příkaz odebere první znak „h“, číslo znaku „1“ a vrátí cílový řetězec začínající druhým znakem, „e.''
Odeberte první dvě postavy z řetězce
Můžete také odebrat určitý počet znaků od začátku řetězce. Například k odebrání prvních dvou znaků z řetězce „Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| awk 'print substr ($ 0, 3)'Výše uvedený příkaz odstraní první dva znaky „he“ nebo čísla znaků „1 a 2“ a vrátí cílový řetězec začínající číslem znaku „3“ nebo „l.''
Odebrat poslední znak z řetězce
Odebrání posledního znaku z „Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| awk 'print substr ($ 0, 1, length ($ 0) -1)'Kde délka ($ 0) -1 znamená odpočet '1'z celkové délky znaků.
Výše uvedený příkaz vytiskne řetězec začínající číslem znaku '1' až do délka ($ 0) -1 odstranit poslední znak.
Existují '19'znaky (včetně mezer) ve výše uvedeném řetězci. Příkaz bude fungovat tiskem všech znaků, počínaje znakem '1„a až po charakter“18,„při odstraňování posledního znaku“19.''
Odebrat poslední dvě postavy z řetězce
Odebrání posledních dvou znaků z „Ahoj, jak se máš?„Příkaz by byl:
$ echo "ahoj, jak se máš??"| awk 'print substr ($ 0, 1, length ($ 0) -2)' 'Kde délka ($ 0) -2 znamená odpočet '2'z celkové délky znaků.
Výše uvedený příkaz vytiskne řetězec počínaje číslem znaku '1„a do počtu znaků“délka ($ 0) -2,'pro odstranění posledních dvou znaků v řetězci.
Odeberte z řetězce první i poslední znak
Odebrání prvního i posledního znaku z řetězce “Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| awk 'print substr ($ 0, 2, length ($ 0) - 2)' 'Kde délka ($ 0) -2 znamená odpočet '2'z celkové délky znaků.
Výše uvedený příkaz vytiskne řetězec počínaje číslem znaku '2„až do počtu znaků“délka ($ 0) -2,'odebrat první a poslední znak.
Odstraňte znak z řetězce pomocí řezu
Vyjmout je nástroj příkazového řádku, který se běžně používá k extrakci čá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é jej 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:
$ echo "ahoj, jak se máš??"| cut -c 2-Tento příkaz vytiskne řetězec, počínaje druhým znakem, zatímco odstraní první znak.
Odeberte první čtyři znaky z řetězce
Odebrání prvních čtyř znaků z řetězce “Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| cut -c 5-Tento příkaz vytiskne řetězec začínající od pátého znaku a odstraní první čtyři znaky.
Tisk řetězce mezi 2. a 5. znakem
Tisk řetězce “Ahoj, jak se máš?“ mezi druhým a pátým znakem, příkaz by byl:
$ echo "ahoj, jak se máš??"| cut -c 2-5Tento příkaz vytiskne řetězec, počínaje od druhého znaku až po pátý znak, přičemž odstraní zbývající počáteční a koncový znak.
Odebrat poslední znak z řetězce
Odebrání posledního znaku z řetězce “Ahoj, jak se máš?“ použijte střih příkaz s rev, jak následuje:
$ echo "ahoj, jak se máš??"| rev | řez -c2- | revTento příkaz funguje tak, že nejprve obrátíte řetězec, poté oříznete první znak a nakonec jej znovu obrátíte, abyste získali požadovaný výstup.
Odebrat poslední čtyři znaky z řetězce
Odebrání posledních čtyř znaků z řádku “Ahoj, jak se máš?“ příkaz by byl:
$ echo "ahoj, jak se máš??"| rev | řez -c5- | revTento příkaz funguje tak, že nejprve obrátíte řetězec, potom oříznete první čtyři znaky a poté jej znovu obrátíte, abyste získali požadovaný výstup.
Odebrat první a poslední znaky z řetězce
Odebrání prvního a posledního znaku z řetězce “Ahoj, jak se máš?“ použijte střih příkaz s rev, jak následuje:
$ echo "ahoj svět!"| cut -c2- | rev | cut -c2- | revTento příkaz funguje tak, že oříznete první znak, poté obrátíte řetězec a oříznete jeho první znak a poté jej znovu obrátíte, abyste získali požadovaný výstup.
Odebrat znak z řetězce pomocí tr
Příkaz tr (zkratka pro překlad) se používá k překladu, mačkání a mazání znaků z řetězce. Můžete také použít tr k odstranění znaků z řetězce.
Pro demonstrační účely použijeme ukázkový řetězec a poté jej připojíme k příkazu tr.
Odebrat všechny výskyty znaků
Pomocí příkazu tr můžete z řetězce odstranit všechny výskyty malých a velkých písmen. Například pro odstranění všech výskytů malého znaku 'h' z řetězce by byl příkaz:
$ echo "Dobrý den, jak se máte?"| tr -d h
Podobně, aby se z řetězce odstranily všechny výskyty velkého znaku 'H', příkaz by byl:
$ echo "Dobrý den, jak se máte?"| tr -d HMůžete také použít interpretované sekvence k odstranění malých nebo velkých písmen:
$ echo "Dobrý den, jak se máte?"| tr -d [: horní:]$ echo "Ahoj, jak se máš?"| tr -d [: nižší:]
Odeberte všechny výskyty malých a velkých znaků
Z řetězce můžete také odstranit všechny výskyty malých i velkých znaků. Například následující příkaz odstraní všechny výskyty znaku „h“, malá i velká.
$ echo "Dobrý den, jak se máte?"| tr -d 'hH'
Odeberte všechny výskyty znaků ve specifickém rozsahu
Chcete-li odstranit všechny výskyty znaků z řetězce ve specifickém rozsahu 'd-h,' příkaz by byl:
$ echo "ahoj, jak se máš??"| tr -d 'd-h'Tento příkaz odstraní všechny znaky v rozsahu 'd-h' (d, e, f, g, h) v řetězci.
Závěr
V Linuxu bude vždy více než jeden způsob, jak dosáhnout jednoduché práce. Totéž platí pro odstraňování znaků z řetězce. Tento článek vám ukázal čtyři různé způsoby, jak to udělat, spolu s několika příklady odebrání nežádoucích znaků z řetězce. Rozhodování o tom, který nástroj použít vše, závisí na vašich preferencích a co je důležitější, na tom, čeho chcete dosáhnout.