Slette tegn som matcher et mønster

Bash:
Slette tegn som matcher et mønster

Hvordan:

For å slette tegn fra en streng som matcher et mønster, bruk parameterexpansjon. Her er noen eksempler:

# Sletter alle instanser av bokstaven 'a'
streng="banan"
echo "${streng//a/}"

# Output: bnn
# Sletter bare det første funnet av bokstaven 'b'
streng="blåbærbrød"
echo "${streng/b/}"

# Output: låbærbrød
# Sletter alt etter (og inkludert) '@' i en e-postadresse
epost="[email protected]"
echo "${epost/*@/}"

# Output: eksempel

Dykk Ned:

Sletting av tegn basert på mønstre stammer fra behovet for å håndtere og manipulere tekst på en fleksibel måte i Unix-skall. Alternativer til Bash inkluderer sed, awk og Perl som gir lignende funksjonalitet med egne syntakser. Bash bruker glob-mønstre for enkel matching, mens sed og awk tillater mer komplekse regulære uttrykk.

Implementasjonsdetaljer: Pattern matching i Bash blir utført ved hjelp av ‘globbing’. Når du bruker ${streng//mønster/erstattning}, matcher Bash ‘mønster’ i ‘streng’ og erstatter det med ’erstattning’.

# Et mer komplekst eksempel som fjerner alt unntatt bokstaver og tall
streng="bær!@#123"
echo "${streng//[^a-zA-Z0-9]/}"

# Output: bær123

I eksempelet ovenfor bruker vi negasjon gjennom [^...] for å bevare bokstaver og tall og slette alt annet.

Se Også: