Cum se manipulează șirurile în Bash pe Linux
Publicat: 2022-07-28Dacă 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
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..."
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
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
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
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
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
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}
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}
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}
Î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%%' '*}
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%' '*}
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##*.}
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#*.}
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ă}
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}
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}
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