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
12
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
- Iegūst faila rindu skaitu, L
- Ģenerē nejaušu skaitli starp 1 un L, R
- 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)
35Lietojuma piemērs (2)
čokurošanās https: // linuxhint.com / bash_cut_command / --silent | sloksnes | dažas līnijasSkatiet 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 50Rezultāts
50Labi. Izskatās labi, bet izmēģināsim kaut ko tādu, kas izskatās nedaudz mazāk triviāls.
Komandas
deklarēt -xf vārdusdeklarēt -xf drukas līniju
seq 1 10 $ (vārdi | wc -l) | xargs -i bash -c "vārdi | drukas līnija "
Rezultāts
111
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
- atrast
- grep
- 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.
- kārtot
- galva
- asti
- grep
- kaķis
- Tr
- tee
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 -1Tomēr, kad komanda atrodas kreisajā rokā, caurule atrodas, mēs varam izlaist mājienu šādi.
kaķis daži faili | kārtot -R | galva -1Tas 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.