Mga Halimbawa ng Bash Sed

Bash Sed Examples



Pinapayagan ka ng Bash na magsagawa ng kapalit na pattern gamit ang variable na pagpapalawak tulad ng ($ {var / pattern / replacement}). At sa gayon, ganito ba ang sed (sed -e ‘s / pattern / replacement /’). Gayunpaman, mayroong higit pa sa sed kaysa sa pagpapalit ng mga pattern sa mga file ng teksto. Dito ay matutuklasan natin ang sed, sa pamamagitan ng halimbawa, na may katumbas na mga utos at daloy ng trabaho upang makatulong sa mga gawain sa araw-araw.

Pag-set up para sa mga halimbawa ng sed

Narito ang isang mabilis na gabay upang mai-set up para sa halimbawa, na susubukan kong huwag gumawa ng labis na labis na paggamit.







mga salitaay isang text file na naglalaman ng mga numero 1 hanggang 100. Kung hindi ka sigurado sa utos na likhain ito, tingnan ang I-export ang pag-andar para sa xargs sa Bash Export Command. Hindi mo malalaman na maaaring ito ay sa iyong susunod na pakikipanayam ng shell scripting.



baray isang text file na naglalaman ng isang solong linya -.



old-phpay isang file ng teksto na naglalaman ng mga linya ng lumang PHP na masisira sa php7 o mas bago. (Pahiwatig: ereg)





Tandaan na ang lahat ng mga pagpapaandar na inilarawan sa itaas ay matatagpuan sa ibaba sa Endnote sa mga pagpapaandar para sa pag-setup.

Mga halimbawa ng sed na may katumbas na mga utos

Sa isang kapaligiran na linya ng utos, mahahanap mo mayroong higit sa isang solusyon sa isang naibigay na gawain. Gayunpaman, sa karamihan ng bahagi, nais mong pumunta sa landas na magbubunga ng pinakamaliit na pagtutol. Narito ang isang listahan ng mga halimbawa ng sed utos na may kaukulang katumbas na mga utos, kung saan ang ilan ay saklaw ng detalye sa ibaba.



1. I-print ang isang random na linya (katumbas ng pag-uuri -R - | ulo -1)

sed -n '$ ((RANDOM% 100)) p '-

2. I-print ang huling linya sa file (katumbas ng ulo -1 -)

sed -n '$ p'-

3. I-print ang unang 10 linya sa isang file (katumbas ng head -n 10 -)

sed '10q'-

4. I-print ang unang linya sa isang file (katumbas ng buntot -1 -)

sed -n '1p'-

5. Tanggalin ang lahat ng mga pagkakataon ng isang character (katumbas ng tr –delete '0' -, kung saan 0 ang character na nais naming tanggalin)

sed -At 's / 0 // g'-

6. I-convert ang csv file sa tsv (katumbas ng tr ‘,’ ‘ t’ -)

sed -At 's /, / t / g'-

7. Mag-apply ng linya sa file (katumbas ng cat bar -)

sed '$ a ---'-

8. Ihanda ang linya sa pag-file (katumbas ng cat - bar)

sed '1i ---'-

9. I-print ang lahat ng mga linya sa file (katumbas ng pusa -)

sed -n -At 'p'-

10. I-print ang isang linya na tumutugma sa isang pattern (katumbas ng grep -e ‘^ 1’ -)

sed -n -At '/ ^ 1 / p'-

11. Tanggalin ang mga linya na tumutugma sa isang pattern (katumbas ng grep -v -e ‘^ 1’ -)

sed -At '/ ^ 1 / d'-

12. Kunin ang bilang ng mga linya sa isang file (katumbas ng wc -l -)

sed -n -At '$ ='-

13. Sumulat sa isang file sa likuran (katumbas na command tee)

sed 'sa$ {1}'-

Halimbawa ng paggamit ng sed upang ipatupad ang utos ng katangan

Sa itaas mismo, mayroong isang halimbawa na may label na Sumulat sa isang file sa background. Uri ng tunog tulad ng utos ng tee. Kaya, ito ay. Dito namin lalawak sa kung paano ipatupad ang isang pagpapaandar upang mapalitan ang tee sa bash gamit ang sed.

Utos

katangan ()
{
pagsusulit $ {#} -eq 1 || bumalik ka;
sed 'sa$ {1}'-
}
pangunahing()
katanganito;
pusaito

pangunahing

Paglabas

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

Makikita mo rito ang dalawang listahan ng mga integer mula 1 hanggang 10. Ang una ay mula sa seq command. Ang pangalawang nakukuha namin mula sa pusa ng file na nakasulat sa tee. Alam kong nakakatawa ito ngunit gumagana ito!

Halimbawa ng paggamit ng sed upang mai-print ang isang random na linya sa isang file

Ipagpalagay na nais naming mag-print ng isang random na linya sa isang file gamit ang bash at isang maliit na sed. Maaari ba nating gawin ito? Oo kaya natin! Narito kung paano.

Ipatupad ang isang pagpapaandar na

  1. Nakukuha ang bilang ng mga linya sa isang file, L
  2. Bumubuo ng isang random na numero sa pagitan ng 1 at L, R
  3. Mga Limbag R

Inaasahan ng pagpapaandar na ang input ay piped mula sa labas.

Utos

ilang-linya()
{
pagpapaandarlc()
{
sed -n -At '$ ='-
};
pagpapaandarlinya ng pag-print()
{
sed -n -At '$ {1}p '-
};
temp= $( mktemp );
pusa-> $ {temp};
pusa $ {temp} |linya ng pag-print $((RANDOM%$( pusa $ {temp} |lc)+1 ));
rm $ {temp}
}

Halimbawa ng paggamit (1)

seq 100 |_

Output (1)

35

Halimbawa ng paggamit (2)

curl https://linuxhint.com/bash_cut_command/ --tahimik |mga strip-tag|ilang-linya

Tingnan ang halimbawa sa ibaba, gamit ang sed upang i-strip ang mga HTML tag. Tandaan na ang labis na halimbawa kung minsan ay nagbabalik nang blangko para sa mga walang laman na linya. Bilang isang ehersisyo, maaari itong mapabuti.

Paggamit ng sed upang mai-print ang mga linya sa isang file

Ipagpalagay na nais mong magpatupad ng isang pagpapaandar sa bash upang mai-print ang isang naibigay na linya sa isang file. Ang pagsubok na mag-print ng isang solong linya sa isang file gamit ang isang loop sa bash, ulo, buntot, o awk ay masyadong maraming trabaho para sa pag-print ng mga linya sa isang file. Good thing meron kami sed. Ang nagresultang pagpapaandar gamit ang sed ay ang mga sumusunod.

Utos

linya ng pag-print()
{
sed -n '$ {1}p '-
}

Tingnan natin ngayon kung ano ang mangyayari kapag gumagamit kami ng print-line sa mga salita.

Utos

mga salita|linya ng pag-printlimampu

Paglabas

limampu

Sige. Mukhang mabuti ngunit subukan natin ang isang bagay na mukhang medyo hindi gaanong mahalaga.

Utos

magpahayag -xfmga salita
magpahayag -xflinya ng pag-print
seq 1 10$(mga salita| wc -ang ) | xargs-akobash -c 'mga salita | linya ng pag-print {} '

Paglabas

1
labing-isang
dalawampu't isa
31
41
51
61
71
81
91

Sige. Ngayon ay mas katulad nito! Nakikita mo kung paano maaaring magamit ang sed sa isang bash script upang mai-print ang anumang linya sa isang file.

Mga halimbawa ng sed na walang katumbas na mga utos

Sa isang command-line environment, kung minsan ang landas sa isang solusyon na nagbubunga ng pinakamaliit na paglaban ay ang sed way; kung hindi man, nagtatapos ka sa paggawa ng mas maraming trabaho kaysa sa kinakailangan sa una. Ang ilang mga utos ay maaaring itampok sa ibaba.

Iutos ang lahat ng mga linya sa isang script ng shell

sed -At 's / ^ / # /'-
Tanggalin ang unang linya
sed -At '1d'-
Tanggalinhulinglinya
sed -At '$ d'-
Magpasok ng isang linya bago ang mga linya na tumutugma sa isang pattern
sed '/ 0 $ / i ---'-
Magpasok ng isang linya pagkatapos ng mga linya na tumutugma sa isang pattern
sed '/ 0 $ / ---'-
Alisin ang mga html na tag
sed -At 's /†*.// g'-
I-upgrade ang eregsalumang php code upang tumakbosaphp7 o mas bago
sed 's / ereg ( ([^,] * ). ([^)] * ) ./ strpos ( 2, 1) / g'
Suriinkung seday mas maaga kaysa sa isang tiyak na bersyon
sed -At 'v 4.5'-

Halimbawa sed bersyon sumasanga sa bash

Sa itaas ng mga halimbawa, mayroong isang linya upang Suriin kung ang sed ay mas maaga kaysa sa isang tiyak na bersyon na maaari naming magamit upang ipatupad ang bersyon ng pagsasanga sa bash, na sa tingin ko ay mas madali kaysa sa pagsubok na magpatupad ng isang pagpapaandar upang ihambing ang mga numero ng bersyon mula sa sed –version output . Ang pitfall na iyon lamang ay kung mayroong isang naunang bersyon ng sed na hindi sumusuporta sa v command, sa gayon tayo ay nagkakaproblema.

Utos

test-sed-bersyon-sa-pinaka() {
itinapon -n | sed 'v$ {1}'-2> /dev/wala
}
bersyon ng pagsubok()
{
itinapon -n 'Bersyon$ {1}. Sige. Gawin ito ng ';
test-sed-bersyon-sa-pinaka$ {1} && {
itinapon -n 'matanda';
totoo
} || {
itinapon -n 'bago'
};
itinapon 'paraan.'
}
pangunahing()
{
lokalv;
para savsa 4.{4,5};
gawin
bersyon ng pagsubok$ {v};
tapos na
}
pangunahing

Paglabas

Bersyon4.4. Sige. Gawin ito sa dating paraan.
Bersyon4.5. Sige. Gawin ito sa bagong paraan.

Tandaan na ang bersyon ng pagpapatakbo ng sed sa aking machine tulad ng pagta-type ng mga character na ito ay 4.4, na magpapaliwanag ng output sa itaas. Gayundin, sa parehong oras, ang pinakabagong bersyon ng gnu sed ay 4.7, mga 3 taong mas matanda kaysa sa mayroon ako. Matanda na ang sed ko! Sa katunayan, sa sed 4.0.6, isang parameter ang naidagdag sa utos ng bersyon sa gayon ang diskarteng ito ay gumagana para sa anumang sinabi na hindi bababa sa v4.0.6, na maluwag sa pagsasaalang-alang na ang bersyon ay inilabas noong unang bahagi ng 2003. Mabuti ka.

Gumawa ako ng labis na paghuhukay, talagang mga BALITA na nagbabasa ng pinakabagong source code. Ang Bersyon 4.6 ay may isang bagong tampok, –debug kung saan itinatapon ang script at inanunsyo ang mga linya ng output. Papayagan ka nitong isalin ang mga sed script na nabuo ng mga pagpapaandar sa bash sa canonical form. Malamig! Huwag kalimutan na kailangan mo ng sed bersyon na sumasanga sa bash. Iyon ay kung saan gumaganap ang halimbawang sed na ito.

Halimbawa ng bash function na gumagamit ng sed upang i-strip ang mga HTML tag

Sa mga halimbawa sa itaas mayroong isang linya upang Alisin ang mga HTML tag. Itapon natin iyon sa isang bash function at gamitin ito upang alisin ang lahat ng mga HTML tag mula sa huling artikulong isinulat ko.

Utos

mga strip-tag()
{
sed -At 's /†*.// g'-
}
curl https://linuxhint.com/bash_cut_command/ --tahimik |mga strip-tag

Hindi ko masasabi na perpekto ito ngunit kahit papaano nababasa ito sa terminal.

Mga halimbawa ng sed sa mga daloy ng trabaho: Halimbawa ng daloy ng trabaho: ligtas na pinalitan ang lahat gamit ang paghahanap, grep, at sed

Ito ay ligtas na sabihin na ang mga pagbabagong ginawa gamit ang sed na may pagpipiliang -i ay hindi maibabalik. Iyon ay maliban kung ikaw ay ganap na sigurado kung anong teksto ang papalitan, malamang na magtapos ka sa isang mas kaunting character kaysa sa nilalayon. Iyon ang dahilan kung bakit sa halimbawang ito, gagamitin namin ang sed sa isang daloy ng trabaho upang ligtas na mapalitan ang teksto sa lahat ng iyong napiling mga file.

Workflow

  1. hanapin
  2. mahigpit na pagkakahawak
  3. sed
hanapin

Dito pipiliin mo ang mga file na napapailalim sa kapalit. Iminumungkahi kong gumamit ng isang utos kasama ang mga linyang ito:

hanapin -typef-pangalan | mahigpit na pagkakahawak -v-At| xargs-ako ...

Halimbawa, baka gusto mong limitahan ang mga file upang mapalitan ang mga file ng PHP hindi kasama ang mga direktoryo ng git repository tulad ng sumusunod.

hanapin -typef-pangalan*.php| mahigpit na pagkakahawak -v -At '.go' | xargs -ako...

Magbasa nang higit pa sa utos ng xargs sa bash.

mahigpit na pagkakahawak

Susunod, susubukan naming itugma ang ilang_pattern sa mga napiling file tulad ng sumusunod. Tandaan na dahil ginagamit namin ang pagpipilian na -o para sa grep, ang output ay magpapakita lamang ng naitugma na string kung mayroon man.

hanapin -typef-pangalan*.php| mahigpit na pagkakahawak -v -At '.go' |
xargs -ako mahigpit na pagkakahawak -Atilang_pattern-o kaya

Dapat ibalik ng utos sa itaas ang isang listahan ng string na tumutugma sa ilang_pattern.

sed

Sa wakas, nais naming palitan ang lahat ng string na tumutugma sa ilang_pattern. Upang gawin iyon kailangan nating baguhin ang grep sa sed tulad ng mga sumusunod.

hanapin -typef-pangalan*.php| mahigpit na pagkakahawak -v -At '.go' |
xargs -ako sed -ako -Ats/ilang_pattern/kapalit/g

Ang utos ng grep ay nagiging sed -i at ang -o na opsyon ay tinanggal. At ayan mayroon ka nito.

Ngayon ay maaari mong suriin kung ano ang mga kuwerdas na papalitan nang sed bago ang pagsubok sa iyong kapalaran.

Mga endnote sa mga pagpipilian na ginamit sa mga halimbawa

Narito ang isang listahan ng mga pagpipilian na ginamit sa mga halimbawa ng sed na tinalakay nang maikli.

Pagpipilian Paglalarawan
-ako I-edit sa lugar. Kung ang input ay isang file (hindi piped sa) ang resulta ng mga expression ay mai-o-overlap ang mga nilalaman ng file.

Tumatanggap si Sed ng isa

hal) sed -n…

-At -e ay kumakatawan sa pagpapahayag. Ang parameter nito ay isang expression sa sed wika.

Tanggap ni Sed ang marami

hal) sed -e'expr1 '-e'expr2'

-n Itinago ang linya na hindi apektado ng pagpapahayag. Iyon ay kung ang ekspresyon ay isang pahayag na naka-print sa sed wika, kung gayon ang mga linya na hindi kasama sa pahayag ng pag-print ay hindi isasama sa output.

hal) sed -n…

Para sa higit pa sa mga magagamit na pagpipilian ng sed, tingnan ang sed –help

Tapusin ang mga tala sa katumbas na mga utos na ginagamit sa mga halimbawa

Ang mga sumusunod na utility ng linya ng utos ay kasama sa mga halimbawa ng sed na may katumbas na mga utos.

  • pag-uri-uriin
  • ulo
  • buntot
  • mahigpit na pagkakahawak
  • pusa
  • NS
  • katangan

Ennote sa sumusunod - halimbawa ng mga katumbas na utos

Kung sakaling nagtataka ka kung ano ang nangyayari - character sa halimbawa, ang tala na ito ay para sa iyo. Nagdagdag ako ng isang - character pagkatapos ng karamihan sa mga utos sa mga halimbawa upang ipahiwatig na inaasahan namin na ang input ay matatanggap sa pamamagitan ng isang tubo. Yan ay,

pusailang-file| pag-uri-uriin -R-| ulo -1

Gayunpaman, kapag ang utos sa kaliwang kamay ang tubo ay naroroon, maaari nating alisin ang pahiwatig tulad ng sumusunod.

pusailang-file| pag-uri-uriin -R | ulo -1

Iyon ang nangyayari sa - character pagkatapos ng mga utos sa mga halimbawa.

Mga endnote sa mga pagpapaandar para sa pag-set up

Kung sakaling tumingin ka, narito ang mga pagpapaandar sa pag-setup para sa mga halimbawa sa itaas. Ang nakuha na output gamit ang idineklarang -f. Magbasa nang higit pa sa idineklarang utos sa bash para sa higit pang mga paggamit.

Utos

mga salita()
{
seq 100
}
bar()
{
itinapon ---
}
old-php()
{
itinapon 'ereg ($ UA,' Bottybot ')'
}

Linya sa ilalim

Nagustuhan ko ang pagsusulat ng mga halimbawa ng Bash sed at nakakuha pa ako ng ilang dagdag na trick sa daan. Si Sed ay isang malakas na utility na linya ng utos at nagpapahiwatig na wika para sa pagmamanipula ng mga file ng teksto. Kung nagustuhan mong malaman ang tungkol sa sed, huwag mag-alala na marami pa ang mahipo. Sed sa.