GNU/Linux >> Znalost Linux >  >> Linux

Příklady manipulace s bashovým řetězcem – délka, podřetězec, najít a nahradit

Když v bash shellu použijete znak dolaru následovaný názvem proměnné, shell rozšíří proměnnou její hodnotou. Tato funkce shellu se nazývá rozšíření parametrů.

Rozšíření parametrů má však mnoho dalších forem, které vám umožňují rozšířit parametr a upravit hodnotu nebo nahradit jiné hodnoty v procesu rozšíření. V tomto článku se podíváme na to, jak používat koncept rozšíření parametrů pro operace manipulace s řetězci.

Tento článek je součástí probíhající série výukových programů bash. Viz náš dřívější článek o rozšíření bash { }.

1. Identifikujte délku řetězce uvnitř skriptu Bash Shell

${#string}

Výše uvedený formát se používá k získání délky dané proměnné bash.

$ cat len.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${#var}

$ ./len.sh
24

Chcete-li porozumět více proměnným bash, přečtěte si 6 praktických příkladů globálních a místních proměnných bash.

2. Extrahujte podřetězec z proměnné uvnitř skriptu Bash Shell

Bash poskytuje způsob, jak extrahovat podřetězec z řetězce. Následující příklad vysvětluje, jak analyzovat n znaků počínaje konkrétní pozicí.

${string:position}

Extrahujte podřetězec z $string na $pozici

${string:position:length}

Extrahujte $length znaků podřetězec z $string počínaje $pozicí. V níže uvedeném příkladu vrací první příkaz echo podřetězec začínající od 15. pozice. Druhý příkaz echo vrací 4 znaky počínaje 15. pozicí. Délka musí být číslo větší nebo rovné nule.

$ cat substr.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${var:15}
echo ${var:15:4}

$ ./substr.sh
geekstuff
geek

V našem dřívějším článku se také dozvíte více o speciálních parametrech bash $*, $@, $#, $$, $!, $?, $-, $_.

3. Nejkratší shoda podřetězců

Následující syntaxe odstraní nejkratší shodu $substring před $string

${string#substring}

Následující syntaxe odstraní nejkratší shodu $substring ze zadní části $string

${string%substring}

Následující ukázkový skript shellu vysvětluje výše uvedené dva nejkratší koncepty shody podřetězců.

$ cat shortest.sh
#! /bin/bash

filename="bash.string.txt"

echo ${filename#*.}
echo ${filename%.*}

$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string

V prvním příkazu echo podřetězec ‚*.‘ odpovídá znakům a tečce a # se odřízne z přední části řetězce, takže odstraní podřetězec „bash“. z proměnné s názvem název_souboru. V druhém příkazu echo se podřetězec „.*“ shoduje s podřetězcem začínajícím tečkou a % se odebírá ze zadní části řetězce, takže vymaže podřetězec „.txt“

4. Nejdelší shoda podřetězců

Následující syntaxe odstraní nejdelší shodu $substring před $string

${string##substring}

Následující syntaxe odstraní nejdelší shodu $substring ze zadní části $string

${string%%substring}

Následující ukázkový skript shellu vysvětluje výše uvedené dva nejdelší koncepty shody podřetězců.

$ cat longest.sh
#! /bin/bash

filename="bash.string.txt"

echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}

$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash

Ve výše uvedeném příkladu ##*. strips nejdelší shodu pro ‚*.‘, která odpovídá „bash.string.“ takže po odstranění tohoto vypíše zbývající txt. A %%.* odebere zezadu nejdelší shodu pro .*, která odpovídá „.string.txt“, po odstranění vrátí „bash“.

5. Najít a nahradit hodnoty řetězců uvnitř skriptu Bash Shell

Nahradit pouze první shodu

${string/pattern/replacement}

Shoduje se se vzorem v proměnné $string a nahrazuje pouze první shodu vzoru s náhradou.

$ cat firstmatch.sh
#! /bin/bash

filename="bash.string.txt"

echo "After Replacement:" ${filename/str*./operations.}

$ ./firstmatch.sh
After Replacement: bash.operations.txt

Nahradit všechny shody

${string//pattern/replacement}

Nahradí všechny shody vzoru náhradou.

$ cat allmatch.sh
#! /bin/bash

filename="Path of the bash is /bin/bash"

echo "After Replacement:" ${filename//bash/sh}

$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh

Pokud jde o hledání a nahrazení, podívejte se na naše dřívější články – příklady sed náhrad a Vim najít a nahradit.

Nahradit začátek a konec

${string/#pattern/replacement}

Následující syntaxe se nahradí náhradním řetězcem, pouze pokud vzor odpovídá začátku $string.

${string/%pattern/replacement}

Následující syntaxe se nahradí náhradním řetězcem, pouze pokud se vzor shoduje na konci daného $string.

$ cat posmatch.sh
#! /bin/bash

filename="/root/admin/monitoring/process.sh"

echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}

$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh

Doporučená četba

Bash 101 Hacks, od Rameshe Natarajan . Většinu času trávím v prostředí Linuxu. Takže jsem přirozeně velkým fanouškem Bash příkazového řádku a skriptování v shellu. Před 15 lety, když jsem pracoval na různých variantách *nix, jsem psal hodně kódu na C shellu a Korn shellu. Později, když jsem začal pracovat na Linuxu jako správce systému, jsem téměř automatizoval všechny možné úkoly pomocí skriptování v prostředí Bash. Na základě mých zkušeností s Bash jsem napsal e-knihu Bash 101 Hacks, která obsahuje 101 praktických příkladů jak pro příkazový řádek Bash, tak pro skriptování shellu. Pokud přemýšlíte o zvládnutí Bash, udělejte si laskavost a přečtěte si tuto knihu, která vám pomůže převzít kontrolu nad příkazovým řádkem Bash a skriptováním shellu.


Linux
  1. Bash pro průvodce smyčkou a příklady

  2. Editor Vi a Vim:12 účinných příkladů hledání a nahrazování

  3. Použití grep a sed k nalezení a nahrazení řetězce

  1. Pomocí „sed“ najít a nahradit?

  2. Jak najít délku struny v Bash [Rychlý tip]

  3. Jak zkontrolovat, zda řetězec obsahuje podřetězec v Bash

  1. Příklady Bash for Loop a While Loop

  2. najít odpovídající text a nahradit další řádek

  3. bash - vyhledá pozici indexu řetězce podřetězce