Bash String Manipulation

Bash String Manipulation
I bash, ikke ulikt noe annet programmeringsspråk, lever et program for å sette ting i bøtter og navngi dem for senere bruk. Disse bøttene er tilgjengelige for å manipulere gjennom hele levetiden eller til de ikke lenger er nødvendig eller ansett. Programmet lever for å manipulere bøtter.

Det som omtales ovenfor som bøtter er det vi kaller variabler på de fleste programmeringsspråk. Videre, å bygge videre på det grunnleggende konseptet med en variabel, blir et konsept vi kaller typing introdusert.

Skriving er et navn for forventet lagrings- og tildelingsatferd til en variabel. Så hvordan ser dette ut når vi kommer tilbake til bøtter?

I den lille bøtteverdenen har vi laget for programmene våre, bøtter har navn. Det er det.

Anta nå at programmene våre ikke har luksusen av å ha et uendelig antall Jetson -poser til disposisjon for å bruke som bøtter. Før en bøtte er navngitt og fylt med innholdet, må programmet bestemme formen og konstitusjonen av hver bøtte det berører. Jeg vet at det virker litt overkill, men det er et nødvendig onde. Alle bøtter er bundet av sin type.

Strengmanipulasjon i bash

Hvordan ser dette ut når vi kommer tilbake til bash?

Funksjoner, matriser og strenger lagres i variabler. Bash bruker det vi kaller attributter til flaggendringer i atferd ved tildeling. Til tross for at det er et system for å endre oppførselen til variabel tildeling, når det hele kommer til det, lagres verdier i variabler som strenger.

I Bash lever et program for å sette strenger i variabler og navngi dem for senere bruk. Disse strengene er tilgjengelige for å manipulere gjennom hele programmet. Programmet lever for å manipulere strenger.

Her vil vi dekke bash -strengmanipulering i pust og så mye dybde som mulig for å være tilgjengelig for lesere av alle merker og former. Les videre.

Hva er strengmanipulering i bash

Strengmanipulering er en operasjon på en streng som endrer innholdet. I bash kommer strengmanipulering i to former: ren bashstrengemanipulering og strengmanipulering via eksterne kommandoer. Her vil vi berøre begge typer strengmanipulering.

Anta at vi har en variabel i bash som holder en streng vi ønsker å manipulere navngitt streng. I tilfelle at mer enn en streng eksisterer, navngir vi strengene streng, streng2, ... også, kan vi velge å navngi en streng noe mer meningsfullt enn streng for å fremme forståelse av strenginnholdet og ment bruk.

Concatenate Strings - Liste strenger i en streng

I bash er den enkle måten å sammenkoble strenger å liste opp strenger i orden. Den resulterende strengen er en ny streng som inneholder alle listet strenger.

$ String1 $ String2 ..

Eksempel: Strengkonturering ved å liste opp strenger i streng


String = "en";
String2 = "to";
String3 = $ String $ String2;
ekko $ String3

Produksjon

en to

Liste over strenger i en matrise

I bash er en annen måte å sammenkoble strenger å liste opp strenger i en matrise og bruke parameterutvidelse for å utvide matrisen til den sammenkoblede strengen. I motsetning til eksemplet ovenfor, kan det å fjerne hvite romskillende matriseelementer imidlertid kreve ekstra arbeid.

Array ($ Strings $ Strings2 ...)

Eksempel: Strengkonturering ved å liste opp strenger i en matrise


strenger = ("en" "to");
ekko $ strenger [@]

Produksjon

en to

Forkorte en streng - skift en streng til venstre

En måte å forkorte en streng på er å flytte innholdet til venstre. Strenginnhold skiftet til venstre forsvant, noe som resulterte i en kortere streng.

Eksempel: Skift venstre sløyfe


String = "abcdefghijklmnopqrstuvwxyz";
for i i $ (seq 0 $ (($ #string - 1)));
gjøre
ekko $ String: $ i;
Ferdig

Produksjon

abcdefghijklmnopqrstuvwxyz
BcdefghijklMnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
Defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
Hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
Jklmnopqrstuvwxyz
Klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
OPQRSTUVWXYZ
PQRSTUVWXYZ
Qrstuvwxyz
rstuvwxyz
Stuvwxyz
Tuvwxyz
Uvwxyz
vwxyz
WXYZ
xyz
yz
z

Skift en streng til høyre, få strengundersøk

En annen måte å forkorte en streng i bash er å få substring av en streng. Den resulterende operasjonen kan brukes til å implementere en skiftoperasjon til høyre for metoden ovenfor.

Eksempel: Skift høyre sløyfe


String = "abcdefghijklmnopqrstuvwxyz";
for i i $ (seq 0 $ (($ #string - 1)));
gjøre
ekko $ String: 0: $ #String -i;
Ferdig

Produksjon

abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxy
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuv
abcdefghijklmnopqrstu
abcdefghijklmnopqrst
abcdefghijklmnopqrs
abcdefghijklmnopqr
ABCDEFGHIJKLMNOPQ
abcdefghijklmnop
abcdefghijklmno
abcdefghijklmn
abcdefghijklm
abcdefghijkl
abcdefghijk
abcdefghij
Abcdefghi
Abcdefgh
abcdefg
A B C D E F
abcde
ABCD
ABC
AB
en

Eksempel: Skiftsløyfepyramide

For moro skyld, la oss kombinere de to eksempler på skiftsløyfe ovenfor for å trekke et skritt i terminalen vår.

Eksempel: Skiftsløyfetrinn


String = "abcdefghijklmnopqrstuvwxyz";

for i i $ (seq 0 $ (($ #string - 1)));
gjøre
ekko $ String: 0: $ #String -i;
Ferdig
| tac;

for i i $ (seq 0 $ (($ #string - 1)));
gjøre
ekko $ String: $ i;
Ferdig

Produksjon

en
AB
ABC
ABCD
abcde
A B C D E F
abcdefg
Abcdefgh
Abcdefghi
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
abcdefghijklmn
abcdefghijklmno
abcdefghijklmnop
ABCDEFGHIJKLMNOPQ
abcdefghijklmnopqr
abcdefghijklmnopqrs
abcdefghijklmnopqrst
abcdefghijklmnopqrstu
abcdefghijklmnopqrstuv
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvwxy
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
BcdefghijklMnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
Defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
Hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
Jklmnopqrstuvwxyz
Klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
OPQRSTUVWXYZ
PQRSTUVWXYZ
Qrstuvwxyz
rstuvwxyz
Stuvwxyz
Tuvwxyz
Uvwxyz
vwxyz
WXYZ
xyz
yz
z

Kapitaliser hele strengen i bash

I BASH4 eller senere kan du kapitalisere de utskrivbare tegnene ved å bruke parameterutvidelse som følger.

$ String ^^

Anta at vi kaster de første 10 ordene i utgangen fra skiftsløyfetrinnet i en variabel kalt pyramide. Legg merke til at umodifisert, den forventede oppførselen til å ekko innholdet er som følger.

Kommando


Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ"
ekko $ Pyramid

Produksjon

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Legg merke til at det som du forventer, det er ingen caps. La oss sprenge det. Det vil si at vi kommer til å lage alle karakterene til karakterene.

Kommando

ekko $ Pyramid ^^

Produksjon

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Det var lett! Hva med om vi bare vil konvertere den første bokstaven i en streng til caps som en setning? Ja vi kan! Alt vi trenger å gjøre er å prøve litt mindre hardt, en karakter mindre for å være nøyaktig.

Kapitaliser bare den første bokstaven i en streng

Kanskje kapitalisering av hele strengen ikke er bashstrengemanipulasjonsteknikken du leter etter. Hva om du bare trenger å kapitalisere det første brevet som en setning?

Kommandoer

Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ"
ekko $ pyramid^

Produksjon

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Anta nå at vi er mer interessert i å konvertere strenger til små bokstaver. Heldigvis er det en ren bash måte å gjøre dette på; det vil si bruk av parameterutvidelse.

Konverter hele strengen til små bokstaver i bash

Konverter en streng til alle små bokstaver i bash ved å bruke dobbelt-COMMA (“,,”) parameterutvidelsesoperatør.

Kommandoer


Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ";
ekko $ Pyramid;
ekko $ Pyramid ,,

Produksjon

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Konverter bare den første bokstaven i en streng til små bokstaver

Konverter det første tegnet i en små små bokstaver i bash ved å bruke en-COMMA (“,”) parameterutvidelsesoperatøren.

Kommandoer


Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ";
ekko $ Pyramid;
ekko $ Pyramid,

Produksjon

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Tilordne en tom streng en verdi og returnere verdien

Ofte vil du sette en tilbakeslag for en tom streng og ha verdien vedvarende gjennom et bashskript som for eksempel tilfellet når du eventuelt aksepterer variabler fra miljøet. Dette kan oppnås ved hjelp av parameterutvidelse.

Kommandoer


ekko [$ str];
ekko [$ str: = tom];
Echo [$ str]

Produksjon

[]
[tømme]
[tømme]

Merknader: STR antas å være uten tildeling

Bytt ut et mønster som oppstår i en streng en gang i bash

Vi har en streng som sitter i en variabel og ønsker å erstatte den første forekomsten av en substring. Dette er hvordan.

Grunnleggende bruk

$ str/mønster/erstatning

Kommandoer


STR = "0110110001101001011011100111010101111000011010000110100101101110011101000010111
0011000110110111101101101 ";
ekko $ str;
ekko $ str/111/000

Produksjon

011011000110100101101110011101010111100001111000011010010111111100111111001
0000101110011000110110111101101101
0110110001101001011000000000010100001000011110000011010010110000000000001
0000100000011000110110000101101101

Bytt ut alle forekomster av et mønster i en streng i bash

Vi har en streng i en variabel og ønsker å erstatte alle forekomster av en substring. Dette er hvordan.

Grunnleggende bruk

$ str // mønster/erstatning

Kommandoer


STR = "011011000110100101101110011101010111100001101000011010010110111001110
10000101110011000110110111101101101 ";
ekko $ str;
ekko $ str // 111/000

Produksjon

01101100011010010110111001110101011110000110100001101001011011100
111010000101110011000110110111101101101
0110110001101001011000000000010100001000011101000011010010110000000
00010000100000011000110110000101101101

Hvordan manipulere strenger i bash ved hjelp av eksterne kommandoer

For å manipulere strenger i bash ved hjelp av en ekstern kommando, må vi bruke en funksjon som Bash Manual Calls Command Substitution. Kort sagt, hva som er inne i $ () eller "blir behandlet som en kommando og erstattet på plass. Helt ærlig foretrekker jeg den første måten; Du kan imidlertid bruke en. Den enkle måten å bruke kommandosubstitusjon er å tilordne resultatet av kommandosubstitusjon til en variabel som følger.

Kommandoer

Resultat = $ (kommando)

Når det. Her er hvordan det nye resultatet skal se ut.

Kommandoer

resultat = $ (ekko "$ resultat" | kommando)

La oss nå prøve å gjøre noe virkelig. Reduser imidlertid en streng som inneholder ord til det siste ordet i strengen? For dette eksemplet, la oss bruke den eksterne kommandoen Gawk.

Merknader om følgende kommandoer. La oss gjøre alt små bokstaver og bli kvitt perioder. Sitatet er av Linus Torvalds. Det er et veldig populært sitat.

Kommandoer


sitat = "snakk er billig. Vis meg koden.";
last_word = $ (ekko "$ sitat //./ "| gawk 'print $ (nf)');
ekko "$ last_word ,,"

Produksjon

kode

Poenglinjen på strengmanipulering i bash

Her dekket vi hvordan man kan manipulere strenger den rene bashvanen, så vel som å bruke eksterne kommandoer. For ren manipulasjonsteknikker. På den annen side, for tilfelle av eksterne kommandoer, ble kommandosubstitusjon brukt. Riktignok, når jeg skriver dette stykket, forbedret jeg evnen til å manipulere strenger i bash. Forhåpentligvis gjorde du det bra.

Merk at temaet for denne diskusjonen ikke ble behandlet i sin helhet. Imidlertid er det igjen øvelser for de som ønsker å tulle litt mer. For andre strengmanipulasjoner som ikke er inneholdt i denne artikkelen, kan du kontakte meg direkte eller kontakte redaktøren.

Det er nok strengmanipulering, foreløpig ... takk,