Bash Sed piemēri

Bash Sed Examples



Bash ļauj veikt modeļa nomaiņu, izmantojot mainīgu paplašināšanu, piemēram, ($ {var/pattern/aizstāšana). Un tā, vai sed patīk šādi (sed -e ‘s/pattern/aizstāšana/’). Tomēr ir daudz vairāk nekā aizstāt modeļus teksta failos. Šeit mēs no jauna atklāsim sed, izmantojot piemēru, ar līdzvērtīgām komandām un darbplūsmām, lai palīdzētu ikdienas uzdevumos.

Uzstādīšana sed piemēriem

Šeit ir īss ceļvedis, lai sagatavotos šim piemēram, un es centīšos nepārspīlēt.







vārdiir teksta fails, kurā ir skaitļi no 1 līdz 100. Ja neesat pārliecināts par komandas izveidi, skatiet Bash Export Command sadaļu Eksportēt funkciju xargs. Jūs nekad nezināt, ka tas varētu būt jūsu nākamajā čaulas skriptu intervijā.



bārsir teksta fails, kas satur vienu rindu -.



vecs-phpir teksta fails, kurā ir vecas PHP rindas, kas tiks pārtrauktas, izmantojot PHP7 vai jaunāku versiju. (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ēri ar līdzvērtīgām komandām

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



1. Izdrukājiet izlases rindiņu (līdzvērtīga kārtošanai -R -| galva -1)

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

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

sed -n '$ p'-

3. Izdrukājiet pirmās 10 rindiņas failā (ekvivalents galvai -n 10 -)

sed '10q'-

4. Izdrukājiet datnes pirmo rindu (līdzvērtīga astei -1 -)

sed -n '1p'-

5. Izdzēsiet visus rakstzīmes gadījumus (līdzvērtīgi tr –delete ‘0’, kur 0 ir rakstzīme, kuru vēlamies dzēst)

sed -Un 's / 0 // g'-

6. Pārvērst csv failu par tsv (ekvivalents tr ',' ' t' -)

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

7. Pievienot rindu failā (ekvivalents kaķu joslai -)

sed '$ a ---'-

8. Ievietojiet rindu failā (ekvivalents kaķu joslai)

sed '1i ---'-

9. Izdrukājiet visas rindiņas failā (ekvivalents kaķim -)

sed -n -Un 'p'-

10. Izdrukājiet līnijas, kas atbilst modelim (ekvivalents grep -e ‘^1’ -)

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

11. Izdzēsiet līnijas, kas atbilst modelim (ekvivalents grep -v -e ‘^1’ -)

sed -Un '/^1/ d'-

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

sed -n -Un '$ ='-

13. Rakstiet failā fonā (ekvivalenta komanda tee)

sed 'iekšā{1} USD'-

Piemērs, izmantojot komandu tee, lai īstenotu tee

Tieši iepriekš ir piemērs ar uzrakstu Rakstīt failā fonā. Izklausās pēc komandas tee. Nu tā ir. Šeit mēs izvērsīsimies, kā ieviest funkciju, lai aizstātu tee bash, izmantojot sed.

Komandas

tee ()
{
pārbaude $ {#} -ekv 1 || atgriezties;
sed 'iekšā{1} USD'-
}
galvenais()
teešo;
kaķisšo

galvenais

Izeja

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

Šeit jūs redzēsit divus veselo 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 izdrukātu izlases rindiņu failā

Pieņemsim, ka vēlamies failā izdrukāt izlases rindiņu, izmantojot bash un nedaudz sed. Vai mēs to varam? Jā, mēs varam! Lūk, kā.

Ieviest funkciju, kas

  1. Iegūst rindā esošo failu skaitu, L
  2. Ģenerē nejaušu skaitli no 1 līdz L, R
  3. Izdrukas R.

Funkcija paredz, ka ieeja tiks ievadīta no ārpuses.

Komandas

dažas līnijas()
{
funkcijulc()
{
sed -n -Un '$ ='-
};
funkcijudrukas līnija()
{
sed -n -Un '{1} USDp '-
};
temp= $( mktemp );
kaķis-> $ {temp};
kaķis $ {temp} |drukas līnija $((RANDOM%$( kaķis $ {temp} |lc)+1 ));
rm $ {temp}
}

Lietošanas piemērs (1)

sek 100 |_

Izeja (1)

35

Lietošanas piemērs (2)

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

Skatiet tālāk sniegto piemēru, izmantojot sed, lai noņemtu HTML tagus. Ņemiet vērā, ka virs piemērs dažkārt tukšām rindām atgriež tukšu. Kā vingrinājumu to var uzlabot.

Izmantojot sed, lai drukātu rindas failā

Pieņemsim, ka vēlaties ieviest funkciju bash, lai izdrukātu noteiktu rindiņu failā. Mēģinājums izdrukāt vienu rindiņu failā, izmantojot cilpu bash, head, tail vai awk, ir pārāk daudz darba, lai izdrukātu rindas failā. Labi, ka mums ir izdevies. Iegūtā funkcija, izmantojot sed, būtu šāda.

Komandas

drukas līnija()
{
sed -n '{1} USDp '-
}

Tagad redzēsim, kas notiek, ja vārdiem izmantojam drukāšanas līniju.

Komandas

vārdi|drukas līnijapiecdesmit

Izeja

piecdesmit

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

Komandas

deklarēt -xfvārdi
deklarēt -xfdrukas līnija
sek 1 10$(vārdi| tualete -viņi ) | xargs-ibash -c 'vārdi | drukas līnija {} '

Izeja

1
vienpadsmit
divdesmitviens
31
41
51
61
71
81
91

Labi. Tagad tas vairāk līdzinās! Jūs redzat, kā sed var izmantot bash skriptā, lai izdrukātu jebkuru rindiņu failā.

Sed piemēri 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ā veicat vairāk darba, nekā prasīts. Dažas komandas var tikt parādītas zemāk.

Komandējiet visas rindas čaulas skriptā

sed -Un 's/^/#/'-
Izdzēsiet pirmo rindu
sed -Un '1d'-
DzēstPēdējaislīnija
sed -Un '$ d'-
Ievietojiet līniju pirms līnijām, kas atbilst modelim
sed '/0 $/i ---'-
Ievietojiet līniju aiz līnijām, kas atbilst modelim
sed ' / 0 $ / ---'-
Noņemiet html tagus
sed -Un 's /†*.// g'-
Jauniniet eregiekšāpalaist veco php koduiekšāphp7 vai jaunāka versija
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Pārbaudietja sedir agrāk nekā noteikta versija
sed -Un 'v 4.5'-

Sed versijas atzarojuma piemērs bash

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

Komandas

test-sed-version-at-maximum() {
izmest ārā -n | sed 'v{1} USD'-2> /dev/null
}
izmēģinājuma versija()
{
izmest ārā -n 'Versija{1} USD. Labi. Dariet to ';
test-sed-version-at-maximum{1} USD && {
izmest ārā -n 'vecs';
taisnība
} || {
izmest ārā -n 'jauns'
};
izmest ārā 'veids.'
}
galvenais()
{
vietējaisv;
priekšviekšā 4.{4,5};
darīt
izmēģinājuma versija$ {v};
darīts
}
galvenais

Izeja

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

Ņemiet vērā, ka sed, kas darbojas manā datorā, rakstot šīs rakstzīmes, ir 4.4 versija, kas izskaidro iepriekš minēto rezultātu. Turklāt tajā pašā laikā jaunākā gnu sed versija bija 4,7, aptuveni 3 gadus vecāka par to, kas man ir. Mana sed ir veca! Patiesībā programmā sed 4.0.6 versijas komandai tika pievienots parametrs, tāpēc šī stratēģija darbojas jebkuram minētajam vismaz v4.0.6, kas ir saudzīgs, ņemot vērā, ka šī versija tika izlaista 2003. gada sākumā.

Es veicu papildu rakšanu, faktiski NEWS lasot no jaunākā avota koda. Versijai 4.6 ir jauna funkcija - atkļūdošana, kas izmaina skriptu un anotē izvades rindas. Tas ļautu jums pārveidot bas skriptus, kas ģenerēti funkcijās bash, kanoniskā formā. Forši! Vienkārši neaizmirstiet, ka jums ir nepieciešama sed versija, kas sazarojas bash. Tieši šeit parādās šis sed piemērs.

Bash funkcijas piemērs, izmantojot HTML, lai noņemtu HTML tagus

Iepriekš minētajos piemēros ir rindiņa HTML tagu noņemšanai. Iemetīsim to bash funkcijā un izmantosim to, lai noņemtu visus HTML tagus no pēdējā mana raksta.

Komandas

sloksnes()
{
sed -Un 's /†*.// g'-
}
čokurošanās https://linuxhint.com/bash_cut_command/ -kluss |sloksnes

Es nevaru teikt, ka tas ir ideāls, bet vismaz tas ir lasāms terminālī.

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

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

Darbplūsma

  1. atrast
  2. satvēriens
  3. sed
atrast

Šeit jūs atlasīsit failus, kas jāaizstāj. Es iesaku izmantot šādu komandu:

atrast -tipsf-vārds | satvēriens -v-Un| xargs-es ...

Piemēram, iespējams, vēlēsities ierobežot failus, lai aizstātu PHP failus, izņemot git repozitoriju direktorijus, kā norādīts tālāk.

atrast -tipsf-vārds*.php| satvēriens -v -Un '.go' | xargs -i...

Lasiet vairāk par komandu xargs bash.

satvēriens

Tālāk mēs mēģināsim saskaņot kādu_pattern failos, kas atlasīti šādi. Ņemiet vērā, ka, tā kā grep izmantojam opciju -o, izvadē tiks parādīta tikai atbilstoša virkne, ja tāda ir.

atrast -tipsf-vārds*.php| satvēriens -v -Un '.go' |
xargs -i satvēriens -Unsome_pattern-vai

Iepriekšminētajai komandai ir jāatgriež virkne, kas atbilst kādam modelim.

sed

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

atrast -tipsf-vārds*.php| satvēriens -v -Un '.go' |
xargs -i sed -i -Uns/some_pattern/nomaiņa/g

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

Tagad jūs varat pārbaudīt, kādas virknes sed tiks nomainītas, nevis pārbaudīt savu veiksmi.

Beigu piezīmes par piemēriem izmantotajām opcijām

Šeit ir īsumā aplūkoto sed piemēros izmantoto iespēju saraksts.

Iespēja Apraksts
-i Rediģēt vietā. Ja ievade ir fails (nav pievienots), izteiksmju rezultāts pārrakstīs faila saturu.

Sed pieņem vienu

piemēram) sed -n…

-Un -e apzīmē izpausmi. Tās parametrs ir izteiksme sed valodā.

Seds pieņem daudzus

piem.) sed -e'expr1 '-e'expr2'

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

piemēram) sed -n…

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

Beigu piezīmes par ekvivalentām komandām, kuras tiek izmantotas piemēros

Sed piemēros ir iekļautas šādas komandrindas utilītas ar līdzvērtīgām komandām.

  • kārtot
  • galvu
  • asti
  • satvēriens
  • kaķis
  • NS
  • tee

Beigu piezīme beigās - piemēram, ekvivalentas komandas

Ja jums rodas jautājums, kas notiek ar rakstzīmi piemērā, šī piezīme ir paredzēta jums. Pēc vairuma komandu piemēros es pievienoju rakstzīmi, lai norādītu, ka mēs sagaidām, ka ievade tiks saņemta caur cauruli. Tas ir,

kaķisdaži faili| kārtot -R-| galvu -1

Tomēr, kad komanda uz caurules kreisās puses ir, mēs varam izlaist mājienu šādi.

kaķisdaži faili| kārtot -R | galvu -1

Tas ir tas, kas notika ar rakstzīmēm pēc komandām piemēros.

Beigu piezīmes par iestatīšanas funkcijām

Ja meklējat, šeit ir norādītas iepriekš minēto piemēru iestatīšanas funkcijas. Rezultāts, kas iegūts, izmantojot deklarēt -f. Lasiet vairāk par komandu deklarēt bash, lai iegūtu vairāk lietojumu.

Komandas

vārdi()
{
sek 100
}
bārs()
{
izmest ārā ---
}
vecs-php()
{
izmest ārā 'ereg ($ UA,' Bottybot ')'
}

Apakšējā līnija

Man patika rakstīt Bash sed piemērus un pat paņēmu dažus papildu trikus. Sed ir spēcīga komandrindas utilīta un izteiksmīga valoda teksta failu apstrādei. Ja jums patika mācīties par sed, neuztraucieties, ka vēl ir daudz kas jāpieskaras. Apsēdieties.