sed

Bash Sed piemēri

Bash Sed piemēri
Bash ļauj veikt modeļa nomaiņu, izmantojot mainīgo paplašināšanu, piemēram, ($ var / pattern / aizstājējs). Tātad, vai sed patīk šis (sed-e's / modelis / aizstājējs / '). Tomēr ir vairāk, nekā nomainīt modeļus teksta failos.  Šeit mēs no jauna atklāsim sed, piemēram, ar līdzvērtīgām komandām un darbplūsmām, lai palīdzētu ikdienas uzdevumos.

Iestatīšana sed piemēriem

Šeit ir īss ceļvedis, kā izveidot piemēru, kuru es centīšos nepadarīt pārāk pārmērīgu.

“Vārdi” ir teksta fails, kurā ir skaitļi no 1 līdz 100. Ja neesat pārliecināts par komandu, kā to izveidot, skatiet sadaļu Eksportēšanas funkcija xargs sadaļā Bash Export Command. Jūs nekad nezināt, ka tas varētu būt jūsu nākamajā čaulas skriptu intervijā.

“Josla” ir teksta fails ar vienu rindiņu -.

“Old-php” ir teksta fails, kas satur vecā PHP rindas, kas sadalīsies php7 vai jaunākā versijā. (Padoms: ereg)

Ņemiet vērā, ka visas iepriekš aprakstītās funkcijas ir atrodamas zemāk sadaļā Piezīme par iestatīšanas funkcijām.

Sed piemērus ar līdzvērtīgām komandām

Komandrindas vidē jūs atradīsit, ka dotajam uzdevumam ir vairāki risinājumi. Tomēr lielākoties jūs vēlaties iet ar ceļu, kas rada vismazāko pretestību. Šeit ir saraksts ar sed komandām ar atbilstošām ekvivalentām komandām, kur dažas no tām tiks detalizēti aplūkotas tālāk.

1. Izdrukājiet nejaušu līniju (ekvivalents kārtojumam -R - | head -1)

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

2.Izdrukājiet faila pēdējo rindiņu (ekvivalents galvai -1 -)

sed -n '$ p' -

3. Izdrukājiet failā pirmās 10 rindas (ekvivalents head -n 10 -)

sed '10q' -

4. Izdrukājiet faila pirmo rindu (ekvivalents astei -1 -)

sed -n '1p' -

5. Dzēst visus rakstzīmes gadījumus (ekvivalents tr -dzēst "0" -, kur 0 ir raksturs, kuru mēs vēlamies izdzēst)

sed-e 's / 0 // g' -

6. Konvertēt csv failu uz tsv (ekvivalents tr ', "\ t' -)

sed -e 's /, / \ t / g' -

7.Pievienot rindiņu failam (ekvivalents kaķu joslai -)

sed '$ a ---' -

8. Pievienojiet rindiņu failam (ekvivalents kaķu joslai)

sed '1i ---' -

9. Izdrukājiet visas failā esošās rindas (ekvivalents kaķim -)

sed -n -e 'p' -

10. Izdrukājiet līnijas, kas atbilst paraugam (ekvivalents grep -e '^ 1' -)

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

11. Dzēst līnijas, kas atbilst paraugam (ekvivalents grep -v -e '^ 1' -)

sed-e '/ ^ 1 / d' -

12. Iegūstiet faila rindu skaitu (ekvivalents wc -l -)

sed -n -e '$ =' -

13. Rakstīt failā fonā (ekvivalents komandu tee)

sed "w $ 1" -

Piemērs, izmantojot sed, lai ieviestu tee komandu

Turpat augšā fonā ir piemērs ar nosaukumu Rakstīt failam. Kāda veida izklausās kā tee komanda. Nu tā ir. Šeit mēs izvērsīsimies par to, kā ieviest funkciju, lai aizstātu tee in bash, izmantojot sed.

Komandas

tee ()

pārbaudīt $ # -eq 1 || atgriešanās;
sed "w $ 1" -

galvenais ()

10. sek tee desmit;
kaķis desmit

galvenais

Rezultāts

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

Šeit jūs redzēsiet divus veselu skaitļu sarakstus no 1 līdz 10. Pirmais ir no komandas seq. Otro mēs iegūstam no faila kaķa, kas rakstīts tee. Es zinu, ka tas ir smieklīgi, bet tas darbojas!

Piemērs, izmantojot sed, lai failā izdrukātu nejaušu līniju

Pieņemsim, ka mēs vēlamies failā izdrukāt izlases līniju, izmantojot bash un mazliet sed. Vai mēs to varam izdarīt? Jā, mēs varam! Lūk, kā.

Ieviesiet funkciju, kas

  1. Iegūst faila rindu skaitu, L
  2. Ģenerē nejaušu skaitli starp 1 un L, R
  3. Izdrukā R

Funkcija sagaida, ka ievade tiek vadīta no ārpuses.

Komandas

dažas rindas ()

funkcija lc ()

sed -n -e '$ =' -
;
funkcija drukas līnija ()

sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
kaķis -> $ temp;
kaķis $ temp | drukas līnija $ ((RANDOM% $ (cat $ temp | lc) + 1));
rm $ temp

Lietojuma piemērs (1)

sek 100 | _

Izeja (1)

35

Lietojuma piemērs (2)

čokurošanās https: // linuxhint.com / bash_cut_command / --silent | sloksnes | dažas līnijas

Skatiet zemāk redzamo piemēru, izmantojot HTML, lai noņemtu HTML tagus. Ņemiet vērā, ka pārrakstītais piemērs tukšām rindām dažreiz atgriež tukšu. Kā vingrinājumu to var uzlabot.

Izmantojot sed, lai drukātu līnijas failā

Pieņemsim, ka vēlaties ieviest funkciju bash, lai izdrukātu noteiktu rindiņu failā. Mēģinājums izdrukāt vienā rindiņā failā, izmantojot cilpu bash, galvā, astē vai awk, ir pārāk daudz darba, lai izdrukātu līnijas failā. Labi, ka mums ir sed. Rezultātā iegūtā funkcija, izmantojot sed, būtu šāda.

Komandas

drukas līnija ()

sed -n "$ 1 p" -

Tagad redzēsim, kas notiek, kad vārdiem izmantojam drukas līniju.

Komandas

vārdi | drukas līnija 50

Rezultāts

50

Labi. Izskatās labi, bet izmēģināsim kaut ko tādu, kas izskatās nedaudz mazāk triviāls.

Komandas

deklarēt -xf vārdus
deklarēt -xf drukas līniju
seq 1 10 $ (vārdi | wc -l) | xargs -i bash -c "vārdi | drukas līnija "

Rezultāts

1
11
21
31
41
51
61
71
81
91

Labi. Tagad tas ir vairāk kā tas! Jūs redzat, kā sed var izmantot bash skriptā, lai izdrukātu jebkuru faila rindu.

Sed piemērus bez līdzvērtīgām komandām

Komandrindas vidē dažreiz ceļš uz risinājumu, kas rada vismazāko pretestību, ir sed veids; pretējā gadījumā jūs galu galā darāt vairāk darba, nekā nepieciešams. Dažas komandas var tikt rādītas zemāk.

Komandējiet visas rindas čaulas skriptā

sed -e 's / ^ / # /' -
Dzēst pirmo rindu
sed-e "1d" -
Dzēst pēdējo rindiņu
sed-e '$ d' -
Pirms līnijām, kas atbilst paraugam, ievietojiet līniju
sed '/ 0 $ / i ---' -
Ievietojiet līniju pēc līnijām, kas atbilst paraugam
sed '/ 0 $ / ---' -
Izvelciet html tagus
sed-es /<[^>] *.// g ' -
Jauniniet ereg vecajā php kodā, lai palaistu php7 vai jaunākā versijā
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Pārbaudiet, vai sed ir vecāks par noteiktu versiju
sed -e 'v 4.5 ' -

Piemērs sed versijai, kas sazarojas basā

Iepriekš minētajos piemēros ir rinda, lai pārbaudītu, vai sed ir vecāka par noteiktu versiju, kuru mēs varam izmantot, lai ieviestu versiju atzarošanu bash, kas, manuprāt, ir vieglāk nekā mēģinājums ieviest funkciju, lai salīdzinātu versiju numurus no sed versijas izejas. Vienīgā kļūda ir tāda, ka, ja ir kāda agrāka sed versija, kas neatbalsta komandu v, tad mums ir problēmas.

Komandas

test-sed-version-at-most ()
atbalss -n | sed "v $ 1" - 2> / dev / null

izmēģinājuma versija ()

echo -n "Versija $ 1. Labi. Dariet to ";
test-sed-version-at-most $ 1 &&
atbalss -n "vecais";
taisnība
||
atbalss -n "jauns"
;
atbalss "veids."

galvenais ()

vietējais v;
par v 4.4,5;
darīt
izmēģinājuma versija $ v;
izdarīts

galvenais

Rezultāts

4. versija.4. Labi. Dariet to pa vecam.
4. versija.5. Labi. Dariet to jaunā veidā.

Ņemiet vērā, ka manā mašīnā darbojas sed versija, rakstot šīs rakstzīmes, ir 4.4, kas izskaidrotu iepriekš minēto rezultātu. Turklāt tajā pašā laikā jaunākā gnu sed versija bija 4.7, apmēram 3 gadus vecāka par to, kas man ir. Mana sed ir veca! Faktiski sed 4.0.6, komandai versija tika pievienots parametrs, tāpēc šī stratēģija darbojas jebkuram minētajam vismaz v4.0.6, kas ir saudzējošs, ņemot vērā, ka šī versija tika izlaista 2003. gada sākumā. Tu esi labs.

Es veicu dažus papildu rakšanas darbus, patiesībā NEWS lasot jaunāko avota kodu. 4. versija.6 ir jauna funkcija -debug, kas izgāž skriptu un anotē izejas līnijas. Tas ļautu tulkot sed skriptus, ko radījušas funkcijas bash, kanoniskā formā. Forši! Vienkārši neaizmirstiet, ka jums ir nepieciešams sed versijas atzarojums bash. Tieši šeit parādās šis sed piemērs.

Funkcijas bash piemērs, izmantojot sed, lai noņemtu HTML tagus

Iepriekš sniegtajos piemēros ir rinda, lai noņemtu HTML tagus. Iemetīsim to bash funkcijā un izmantosim to, lai noņemtu visus HTML tagus no pēdējā rakstītā raksta.

Komandas

sloksnes-tagi ()

sed-es /<[^>] *.// g ' -

čokurošanās https: // linuxhint.com / bash_cut_command / --silent | sloksnes

Es nevaru teikt, ka tas ir ideāli, bet vismaz ir nolasāms terminālā.

Sed piemēri ar darbplūsmām: Darbplūsmas piemēri: droši nomainiet visus, izmantojot find, grep un sed

Var droši teikt, ka izmaiņas, kas veiktas, izmantojot sed ar opciju -i, ir neatgriezeniskas. Tas ir, ja vien jūs neesat pilnīgi pārliecināts, kāds teksts ir jāaizstāj, iespējams, ka jums būs par vienu rakstzīmi mazāk nekā paredzēts. Tāpēc šajā piemērā mēs izmantosim sed darbplūsmā, lai droši aizstātu tekstu visos atlasītajos failos.

Darbplūsma

  1. atrast
  2. grep
  3. sed
atrast

Šeit jūs atlasīsit failus, kas tiks aizstāti. Es iesaku izmantot komandu atbilstoši šīm līnijām:

atrast -tipa f -nosaukums | grep -v -e | xargs -i ..

Piemēram, jūs varat ierobežot failus, lai aizstātu PHP failus, izņemot git repozitoriju direktorijus, šādi.

atrast -type f -nosaukums \ *.php | grep -v -e '.git '| xargs -i ..

Lasiet vairāk par xargs komandu bash.

grep

Tālāk mēs mēģināsim saskaņot some_pattern failos, kas atlasīti šādi. Ņemiet vērā, ka, tā kā grep izmantojam opciju -o, izvade parādīs saskaņoto virkni tikai tad, ja tāda ir.

atrast -type f -nosaukums \ *.php | grep -v -e '.git '|
xargs -i grep -e some_pattern -o

Iepriekš norādītajai komandai jāatgriež virknes saraksts, kas atbilst some_pattern.

sed

Visbeidzot, mēs vēlamies aizstāt visas virknes, kas atbilst some_pattern. Lai to izdarītu, mums jāpārveido grep uz sed šādi.

atrast -type f -nosaukums \ *.php | grep -v -e '.git '|
xargs -i sed -i -e s / some_pattern / aizstājējs / g

Grep komanda kļūst sed -i un opcija -o tiek noņemta. Un tur jums tas ir.

Tagad jūs varat pārbaudīt, kuras stīgas nomainīs sed iepriekš, nevis pārbaudīt veiksmi.

Galotnes par piemēriem izmantotajām opcijām

Šeit ir īsumā apskatītajos piemēros izmantoto opciju saraksts.

Opcija Apraksts
-i Rediģēt vietā. Ja ievade ir fails (nevis ievadīts), izteiksmju rezultāts pārrakstīs faila saturu.

Seds pieņem vienu

piem., sed -n…

-e -e apzīmē izteiksmi. Tās parametrs ir izteiciens sed valodā.

Seds pieņem daudzus

piem., sed -e 'expr1' -e 'expr2'…

-n Slēpj līniju, kuru izteiksme neietekmē. Tas ir, ja izteiksme ir drukas paziņojums sed valodā, tad rindas, kas nav iekļautas drukas paziņojumā, netiks iekļautas izvadē.

piem., sed -n…

Plašāku informāciju par pieejamajām sed iespējām skatiet sadaļā sed -help

Beigu piezīmes par līdzvērtīgām komandām tiek izmantotas piemēros

Šādi komandrindas utilīti ir iekļauti sed piemēros ar līdzvērtīgām komandām.

Aizzīme par beigu daļu - piemēram, līdzvērtīgas komandas

Gadījumā, ja jums rodas jautājums, kas notiek ar rakstzīmi piemērā, šī piezīme ir domāta jums. Pēc lielākajai daļai komandu piemēriem pievienoju a - rakstzīmi, lai dotu mājienu, ka mēs sagaidām, ka ievadi saņems caur cauruli. Tas ir,

kaķis daži faili | kārtot -R - | galva -1

Tomēr, kad komanda atrodas kreisajā rokā, caurule atrodas, mēs varam izlaist mājienu šādi.

kaķis daži faili | kārtot -R | galva -1

Tas notika ar piemēriem pēc rakstzīmēm pēc komandām.

Galotnes par iestatīšanas funkcijām

Ja meklējat, šeit ir iestatīšanas funkcijas iepriekš minētajiem piemēriem. Rezultāts, kas iegūts, izmantojot deklarēt -f. Lai uzzinātu vairāk par lietošanu, lasiet vairāk par deklarēt komandu bash.

Komandas

vārdi ()

sek 100

bārs ()

atbalss ---

old-php ()

echo 'ereg (USD UA, "Bottybot")'

Apakšējā līnija

Man patika rakstīt Bash sed piemērus un pa ceļam pat paņēmu dažus papildu trikus. Sed ir spēcīga komandrindas lietderība un izteiksmīga valoda, lai manipulētu ar teksta failiem. Ja jums patika uzzināt par sed, neuztraucieties, ka vēl ir jāpieskaras vēl daudz kam. Sed uz priekšu.

Cīņa par Vesnota apmācību
Cīņa par Vesnotu ir viena no populārākajām atvērtā koda stratēģijas spēlēm, kuru jūs varat spēlēt šajā laikā. Šī spēle ir izstrādāta ne tikai ļoti ilg...
0 A.D. Apmācība
No daudzajām stratēģijas spēlēm 0 A.D. izdodas izcelties kā visaptverošs nosaukums un ļoti dziļa, taktiska spēle, neskatoties uz to, ka tā ir atvērtā ...
Unity3D apmācība
Ievads Vienotībā 3D Unity 3D ir spēcīgs spēļu izstrādes dzinējs. Tā ir pārrobežu platforma, kas ļauj izveidot spēles mobilajām ierīcēm, tīmeklim, gald...