Cum se manipulează șirurile în Bash pe Linux

Publicat: 2022-07-28
Linia de comandă Linux pe ecranul laptopului.
fatmawati achmad zaenuri/Shutterstock.com

Dacă există un lucru cu care Linux este bine echipat, este utilitățile pentru manipularea șirurilor. Dar există și un întreg set de funcționalități încorporate chiar în shell-ul Bash. Iată cum se folosește.

Manipularea șirurilor

Ecosistemul Linux este plin de instrumente fantastice pentru lucrul cu text și șiruri. Acestea includ awk, grep, sed și cut. Pentru orice dispută de text grea, acestea ar trebui să fie alegerile tale de preferat.

Uneori, totuși, este convenabil să utilizați capacitățile încorporate ale shell-ului, mai ales când scrieți un script scurt și simplu. Dacă scriptul dvs. va fi partajat cu alte persoane și va rula pe computerele lor, utilizarea funcționalității standard Bash înseamnă că nu trebuie să vă întrebați despre prezența sau versiunea vreunuia dintre celelalte utilitare.

Dacă aveți nevoie de puterea utilităților dedicate, atunci folosiți-le prin toate mijloacele. Pentru asta sunt ei acolo. Dar adesea, scenariul și Bash își pot face treaba singuri.

Deoarece sunt încorporate pentru Bash, le puteți folosi în scripturi sau pe linia de comandă. Folosirea lor într-o fereastră de terminal este o modalitate rapidă și convenabilă de a-ți prototipa comenzile și de a perfecționa sintaxa. Evită ciclul de editare, salvare, rulare și depanare.

Crearea și lucrul cu variabile șir

Tot ce avem nevoie pentru a declara o variabilă și a-i atribui un șir este să denumim variabila, să folosim semnul egal = și să furnizăm șirul. Dacă există spații în șirul dvs., înfășurați-l în ghilimele simple sau duble. Asigurați-vă că nu există spații albe de ambele părți ale semnului egal.

 my_string="Bună ziua, How-To Geek World."
 echo $my_string 

Crearea și scrierea unei variabile șir

Odată ce ați creat o variabilă, numele variabilei este adăugat la lista de cuvinte de completare a filei a shell-ului. În acest exemplu, tastând „my_” și apăsând tasta „Tab” a introdus numele complet pe linia de comandă.

Variabile numai pentru citire

Există o comandă declare pe care o putem folosi pentru declararea variabilelor. În cazuri simple, nu prea aveți nevoie de el, dar folosirea lui vă permite să utilizați unele dintre opțiunile comenzii. Probabil cea pe care ați folosi-o cel mai mult este opțiunea -r (numai citire). Aceasta creează o variabilă numai în citire care nu poate fi modificată.

 declare -r read_only_var="Acesta este un șir imuabil!"

Dacă încercăm să-i atribuim o nouă valoare, va eșua.

 read_only_var="Un șir nou..." 

Nu se poate schimba o variabilă șir numai pentru citire

Scriind la fereastra terminalului

Putem scrie mai multe șiruri în fereastra terminalului folosind echo sau printf, astfel încât acestea să pară ca și cum ar fi un șir. Și nu ne limităm la propriile variabile șiruri, putem încorpora variabile de mediu în comenzile noastre.

 user_account="Contul dvs. de utilizator este:"
 echo $user_account $USER 

Scrierea a două șiruri în fereastra terminalului ca și cum ar fi un șir

Concatenarea șirurilor

Operatorul plus-egal, += , vă permite să „adăugați” două șiruri împreună. Se numește concatenare.

 user_account="Contul dvs. de utilizator este:"
 user_account+=$USER
 echo $cont_utilizator 

Concatenarea șirurilor cu +=

Rețineți că nu obțineți un spațiu adăugat automat între șirurile concatenate. Dacă trebuie să aveți un spațiu, trebuie să puneți unul în mod explicit la sfârșitul primului șir sau la începutul celui de-al doilea.

 user_account="Contul dvs. de utilizator este: "
 user_account+=$USER
 echo $cont_utilizator 

Adăugarea unui spațiu suplimentar înainte de a utiliza += pentru a concatena două șiruri

LEGATE: Cum să setați variabilele de mediu în Bash pe Linux

Citirea intrărilor utilizatorului

Pe lângă crearea de variabile șir care au conținutul definit ca parte a declarației lor, putem citi intrarea utilizatorului într-o variabilă șir.

Comanda de read citește intrarea utilizatorului. Opțiunea -p (prompt) scrie un prompt în fereastra terminalului. Intrarea utilizatorului este stocată în variabila șir. În acest exemplu, variabila se numește user_file .

 citiți -p „Deschideți ce fișier?” user_file
 echo $user_file 

Citirea șirului introdus de utilizator

Dacă nu furnizați o variabilă șir pentru a captura intrarea, aceasta va funcționa în continuare. Intrarea utilizatorului va fi stocată într-o variabilă numită REPLY .

 citiți -p „Deschideți ce fișier?”
 echo $REPLY 

Citirea intrărilor utilizatorului fără a furniza o variabilă șir

De obicei, este mai convenabil să-ți oferi propria variabilă și să-i dai un nume semnificativ.

Manipularea șirurilor

Acum că avem șirurile noastre, indiferent dacă sunt definite în momentul creării, citite din intrarea utilizatorului sau create prin concatenarea șirurilor, putem începe să facem lucruri cu ele.

Găsirea lungimii șirului

Dacă este important sau util să cunoaștem lungimea unui șir, îl putem obține precedând numele variabilei cu simbolul hash „ # ”.

 my_string="Există 39 de caractere în acest șir."
 echo ${#my_string} 

Obținerea lungimii unui șir

Extragerea subșirurilor prin decalaje de caractere

Putem extrage un subșir dintr-o variabilă șir furnizând un punct de început în șir și o lungime opțională. Dacă nu furnizăm o lungime, subșirul va conține totul, de la punctul de început până la ultimul caracter.

Punctul de început și lungimea urmează numele variabilei, cu două puncte „ : ” între ele. Rețineți că caracterele dintr-o variabilă șir sunt numerotate începând cu zero .

 long_string="Frankenstein sau Prometeuul modern"
 substring=${long_string:0:12}
 echo $subșir
 echo ${long_string:27} 

Extragerea subșirurilor de la începutul și de la sfârșitul unui șir

O altă variantă vă permite să aruncați un număr de litere de la capătul de coadă al șirului. În mod efectiv, vă permite să setați un punct de pornire și să utilizați un număr negativ ca lungime. Subșirul va conține caracterele de la punctul de început până la sfârșitul șirului, minus numărul de caractere pe care l-ați specificat în numărul negativ.

 my_string="alfabetic"
 echo ${my_string:5:-4} 

Extragerea unui subșir din mijlocul unui șir

În toate cazurile, variabila șir originală este neatinsă. Subșirul „extras” nu este de fapt eliminat din conținutul variabilei.

Extragerea subșirurilor prin delimitator

Dezavantajul utilizării decalajelor de caractere este că trebuie să știți în prealabil unde se află subșirurile pe care doriți să le extrageți în cadrul șirului.

Dacă șirul dvs. este delimitat de un caracter care se repetă, puteți extrage subșiruri fără a ști unde sunt în șir și nici cât de lungi sunt.

Pentru a căuta din partea din față a șirului, urmați numele variabilei cu semne de procent dublu, %% , caracterul de delimitare și un asterisc, * . Cuvintele din acest șir sunt delimitate de spații.

 long_string="primul al doilea al treilea al patrulea al cincilea"
 echo ${long_string%%' '*} 

Extragerea unui subșir din fața unui șir prin delimitator

Aceasta returnează primul subșir din partea din față a șirului care nu conține caracterul delimitator. Aceasta se numește opțiunea subșirului scurt.

Opțiunea subșir lung returnează partea din față a șirului până la ultimul subșir delimitat. Cu alte cuvinte, omite ultimul subșir delimitat. Sintactic, singura diferență este că folosește un singur semn de procent „ % ” în comandă.

 long_string="primul al doilea al treilea al patrulea al cincilea"
 echo ${long_string%' '*} 

Extragerea unui subșir lung din fața unui șir prin delimitator

După cum v-ați aștepta, puteți căuta în același mod de la sfârșitul șirului. În loc de semnul de procent, utilizați un semn hash „ # ” și mutați delimitatorul să vină după asteriscul „ * ” în comandă.

 long_string="acest.șir.lung.de.cuvinte.este.delimitat.de.perioade"
 echo ${long_string##*.} 

Extragerea unui subșir de la sfârșitul unui șir prin delimitator

Aceasta este opțiunea de subșir scurt, decupează primul subșir pe care îl găsește din spatele șirului care nu conține delimitator.

 long_string="acest.șir.lung.de.cuvinte.este.delimitat.de.perioade"
 echo ${long_string#*.} 

Extragerea unui subșir lung de la sfârșitul unui șir prin delimitator

Opțiunea subșir lung returnează partea din spate a șirului până la primul delimitator din partea din față a șirului. Cu alte cuvinte, omite primul subșir delimitat.

Substituție de șiruri

Schimbarea subșirurilor cu alte subșiruri este ușoară. Formatul este numele șirului, subșirul care va fi înlocuit și subșirul care va fi inserat, separate prin caractere oblice „ / ”.

 string="porcul albastru chicotește"
 echo ${șir/porc/capră} 

Înlocuirea unui subșir într-un șir

Pentru a limita căutarea la sfârșitul șirului, precedați șirul de căutare cu un semn de procente „ % ”.

 string="porcul albastru chicotește"
 echo ${string/%chicote/chicotește} 

Înlocuirea unui subșir la sfârșitul unui șir

Pentru a limita căutarea la începutul șirului, precedați șirul de căutare cu un caracter hash „ # ”.

 string="porcul albastru chicotește"
 echo ${șir/#albastru/galben} 

Înlocuirea unui subșir la începutul unui șir

Un șir este un lucru flexibil

Dacă un șir nu este așa cum ți-ai dori sau nu ai nevoie de el, aceste instrumente te vor ajuta să-l reformatezi astfel încât să se potrivească nevoilor tale. Pentru transformări complicate, utilizați utilitățile dedicate, dar pentru modificările minore utilizați shell-urile încorporate și evitați supraîncărcarea și rularea unui instrument extern.

RELATE: Tot ce ați dorit vreodată să știți despre inode pe Linux