Nastavenie pre príklady sed
Tu je rýchly návod, ako sa pripraviť na príklad, ktorý sa pokúsim neurobiť príliš prehnane.
slováje textový súbor obsahujúci čísla 1 až 100. Ak si nie ste istí príkazom na jeho vytvorenie, pozrite si časť Exportná funkcia pre xargs v Bash Export Command. Nikdy neviete, že to môže byť pri ďalšom rozhovore o skriptovaní škrupín.
barje textový súbor obsahujúci jeden riadok -.
old-phpje textový súbor obsahujúci riadky starého PHP, ktoré sa zlomia v php7 alebo novšom. (Tip: ereg)
Všimnite si toho, že všetky vyššie popísané funkcie nájdete nižšie v Endnote o funkciách pre nastavenie.
Sed príklady s ekvivalentnými príkazmi
V prostredí príkazového riadka zistíte, že existuje viac ako jedno riešenie danej úlohy. Väčšinou však chcete ísť cestou, ktorá kladie najmenší odpor. Tu je zoznam príkladov príkazov sed s príslušnými ekvivalentnými príkazmi, pričom niektoré z nich budú podrobne popísané nižšie.
1. Vytlačte náhodný riadok (ekvivalent k zoradeniu -R -| hlava -1)
sed -n '$ ((NÁHODNÝ % 100)) p '-2. Vytlačte posledný riadok v súbore (ekvivalent hlavy -1 -)
sed -n '$ p'-3. Vytlačte prvých 10 riadkov do súboru (ekvivalent k hlavičke -n 10 -)
sed '10q'-4. Vytlačte prvý riadok v súbore (ekvivalent chvosta -1 -)
sed -n '1p'-5. Odstráňte všetky inštancie znaku (ekvivalent tr –delete ‘0’ -, kde 0 je znak, ktorý chceme odstrániť)
sed -A 's / 0 // g'-6. Previesť súbor csv na tsv (ekvivalent tr ‘,‘ ‘ t’ -)
sed -A 's/,/ t/g'-7. Pripojte riadok k súboru (ekvivalent k pruhu mačky -)
sed '$ a ---'-8. Pripojte riadok k súboru (ekvivalent k stĺpcu s čiarou)
sed „1i ---“-9. Vytlačte všetky riadky v súbore (ekvivalent mačky -)
sed -n -A 'p'-10. Vytlačte riadky zodpovedajúce vzoru (ekvivalent grep -e „^1“ -)
sed -n -A '/^1/ p'-11. Odstráňte riadky zodpovedajúce vzoru (ekvivalent grep -v -e ‘^1‘ -)
sed -A '/^1/ d'-12. Zistite počet riadkov v súbore (ekvivalent wc -l -)
sed -n -A '$ ='-13. Napíšte do súboru na pozadí (ekvivalentné príkazové pole)
sed 'v{1} $'-Príklad pomocou sed na implementáciu príkazu tee
Hneď hore je príklad označený ako Zápis do súboru na pozadí. Znie to ako príkaz tee. Tak to je. Tu sa budeme zaoberať tým, ako implementovať funkciu nahradzujúcu odpalisko v bash pomocou sed.
Príkazy
tričko (){
test {$} $ -ekv 1 || vrátiť sa;
sed 'v{1} $'-
}
Hlavná()
tričkototo;
kattoto
Hlavná
Výkon
12
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Tu uvidíte dva zoznamy celých čísel od 1 do 10. Prvý je z príkazu seq. Druhé dostaneme od mačky súboru napísaného v odpalisku. Viem, je to smiešne, ale funguje to!
Príklad použitia sed na vytlačenie náhodného riadka v súbore
Predpokladajme, že chceme vytlačiť náhodný riadok v súbore pomocou bash a trochu sed. Zvládneme to? Áno, môžme! Tu je postup.
Implementujte funkciu, ktorá
- Zistí počet riadkov v súbore, L
- Generuje náhodné číslo medzi 1 a L, R.
- Tlačí R.
Funkcia očakáva, že vstup bude potrubím zvonku.
Príkazy
nejaký-riadok(){
funkciulc()
{
sed -n -A '$ ='-
};
funkciutlačový riadok()
{
sed -n -A '{1} $p '-
};
tepl= $( mktemp );
kat-> $ {temp};
kat $ {temp} |tlačový riadok $((NÁHODNÝ%$( kat $ {temp} |lc)+1 ));
rm $ {temp}
}
Príklad použitia (1)
nasl 100 |_Výstup (1)
35Príklad použitia (2)
zvinutie https://linuxhint.com/bash_cut_command/ -tichý |strip-tagy|nejaký-riadokPozrite sa na príklad nižšie s použitím kódu sed na odstránenie značiek HTML. Všimnite si toho, že uvedený príklad niekedy vráti prázdne riadky. Ako cvičenie sa to dá zlepšiť.
Použitie sed na tlač riadkov v súbore
Predpokladajme, že chcete v bash implementovať funkciu na vytlačenie daného riadka v súbore. Pokúšať sa vytlačiť jeden riadok v súbore pomocou slučky v bash, head, tail alebo awk je príliš veľa práce na vytlačení riadkov v súbore. Ešte dobre, že máme sed. Výsledná funkcia pomocou sed by bola nasledovná.
Príkazy
tlačový riadok(){
sed -n '{1} $p '-
}
Teraz sa pozrime, čo sa stane, keď použijeme tlačový riadok na slová.
Príkazy
slová|tlačový riadokpäťdesiatVýkon
päťdesiatDobre. Vyzerá to dobre, ale skúsme niečo, čo vyzerá o niečo menej triviálne.
Príkazy
vyhlásiť -xfslovávyhlásiť -xftlačový riadok
nasl 1 10$(slová| wc -ten ) | xargs-ibash -c 'slová | print-line {} '
Výkon
1jedenásť
dvadsaťjeden
31
41
51
61
71
81
91
Dobre. Teraz je to viac podobné! Vidíte, ako sa dá sed v skripte bash použiť na vytlačenie ľubovoľného riadka v súbore.
Sed príklady bez ekvivalentných príkazov
V prostredí príkazového riadka je niekedy cesta k riešeniu, ktoré vyvoláva najmenší odpor, cestou sed; inak v konečnom dôsledku urobíte viac práce, ako sa v prvom rade vyžaduje. Niektoré príkazy môžu byť uvedené nižšie.
Príkaz na všetky riadky v skripte shell
sed -A 's/^/#/'-Odstráňte prvý riadok
sed -A '1d'-
Vymazaťposlednýriadok
sed -A '$ d'-
Vložte riadok pred riadky zodpovedajúce vzoru
sed '/0 $/i ---'-
Vložte riadok za riadky zodpovedajúce vzoru
sed ' / 0 $ / ---'-
Odstráňte html značky
sed -A 's /antine*.// g'-
Aktualizovať eregvstarý php kód na spustenievphp7 alebo novší
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Skontrolovaťkeby sedje staršia ako určitá verzia
sed -A „v 4.5“-
Príklad vetvenia verzie sed v bash
Vyššie v príkladoch je riadok na kontrolu, či je sed starší ako určitá verzia, ktorý môžeme použiť na implementáciu vetvenia verzií v bash, čo je podľa mňa jednoduchšie ako pokúšať sa implementovať funkciu na porovnanie čísel verzií z výstupu sed –version . Jediným úskalím je, že ak existuje staršia verzia sed, ktorá nepodporuje príkaz v, máme problémy.
Príkazy
test-sed-verzia-nanajvýš() {zahodil -n | sed 'v{1} $'-2> /dev/nulový
}
skúsiť verziu()
{
zahodil -n „Verzia{1} $. Dobre. Urob to ';
test-sed-verzia-nanajvýš{1} $ && {
zahodil -n „starý“;
pravda
} || {
zahodil -n 'Nový'
};
zahodil 'spôsob.'
}
Hlavná()
{
miestnyv;
prevv 4.{4,5};
urobiť
skúsiť verziu$ {v};
hotový
}
Hlavná
Výkon
Verzia4.4. Dobre. Urob to starým spôsobom.Verzia4.5. Dobre. Urob to novým spôsobom.
Všimnite si toho, že verzia sed bežiaca na mojom počítači pri zadávaní týchto znakov je 4.4, čo by vysvetľovalo výstup vyššie. Súčasne bola najnovšia verzia gnu sed 4,7, asi o 3 roky staršia ako tá, ktorú mám. Môj sed je starý! V skutočnosti v sede 4.0.6 bol do príkazu verzie pridaný parameter, takže táto stratégia funguje pre všetky uvedené verzie aspoň v4.0.6, ktoré sú zhovievavé vzhľadom na to, že verzia bola vydaná začiatkom roku 2003. Ste dobrí.
Urobil som nejaké extra kopanie, vlastne NOVINKY, ktoré som čítal z najnovšieho zdrojového kódu. Verzia 4.6 má novú funkciu - ladenie, ktoré ukladá skript a anotuje výstupné riadky. To vám umožní preložiť sed skripty generované funkciami v bash do kanonickej podoby. Super! Nezabudnite, že v bash potrebujete vetvenie verzie sed. Tu vstupuje do hry tento sed príklad.
Príklad funkcie bash používajúcej sed na odstraňovanie značiek HTML
Vo vyššie uvedených príkladoch je riadok na odstránenie značiek HTML. Vrhnime to do funkcie bash a použijeme to na odstránenie všetkých značiek HTML z posledného článku, ktorý som napísal.
Príkazy
strip-tagy(){
sed -A 's /antine*.// g'-
}
zvinutie https://linuxhint.com/bash_cut_command/ -tichý |strip-tagy
Nemôžem povedať, že je perfektný, ale aspoň je čitateľný v termináli.
Príklady sed s pracovnými postupmi: Príklad pracovného toku: bezpečne nahraďte všetky pomocou príkazov find, grep a sed
Je bezpečné povedať, že zmeny vykonané pomocou sed s možnosťou -i sú nevratné. To znamená, že pokiaľ si nie ste úplne istí, aký text má byť nahradený, pravdepodobne budete mať o jeden znak menej, ako bolo určené. Preto v tomto prípade použijeme sed v pracovnom toku na bezpečnú náhradu textu vo všetkých súboroch, ktoré ste vybrali.
Pracovný tok
- Nájsť
- uchopenie
- sed
Nájsť
Tu vyberiete súbory, ktoré sa majú nahradiť. Navrhujem použiť príkaz v tomto poradí:
Nájsť -typf-názov | uchopenie -v-A| xargs-ja ...Môžete napríklad chcieť obmedziť súbory na nahradenie súborov PHP s výnimkou adresárov úložiska git nasledovne.
Nájsť -typf-názov*.php| uchopenie -v -A '. choď' | xargs -i...Prečítajte si viac o príkaze xargs v bash.
uchopenie
Ďalej sa pokúsime priradiť some_pattern k súborom vybraným nasledovne. Všimnite si toho, že pretože pre grep používame voľbu -o, výstup zobrazí iba zodpovedajúci reťazec, ak existuje.
Nájsť -typf-názov*.php| uchopenie -v -A '. choď' |xargs -i uchopenie -Asome_pattern-alebo
Vyššie uvedený príkaz by mal vrátiť zoznam reťazcov zodpovedajúcich some_pattern.
sed
Nakoniec chceme nahradiť všetky reťazce zodpovedajúce some_pattern. Aby sme to urobili, musíme grep previesť na sed nasledujúcim spôsobom.
Nájsť -typf-názov*.php| uchopenie -v -A '. choď' |xargs -i sed -i -As/some_pattern/výmena/g
Príkaz grep sa zmení na sed -i a voľba -o sa odstráni. A tu to máte.
Teraz môžete namiesto testovania šťastia skontrolovať, aké struny budú v sedle nahradené.
Poznámky k možnostiam použitým v príkladoch
Tu je zoznam možností použitých v príkladoch sed, ktoré sme stručne prediskutovali.
Možnosť | Popis |
-i | Upraviť na mieste. Ak je vstupom súbor (nie je zapojený), výsledok výrazov prepíše obsah súboru. Sed jednu prijíma napr) sed -n… |
-A | -e znamená výraz. Jeho parametrom je výraz v jazyku sed. Sed mnohých prijíma napr. sed -e'expr1 '-e'expr2'
|
-n | Skryje čiaru, ktorá nie je ovplyvnená výrazom. To znamená, že ak je výraz tlačovým príkazom v jazyku sed, potom riadky, ktoré nie sú zahrnuté v tlačovom vyhlásení, nebudú zahrnuté do výstupu. napr) sed -n…
|
Ďalšie informácie o dostupných možnostiach sed nájdete v sed –help
Ukončite poznámky k ekvivalentným príkazom použitým v príkladoch
Nasledujúce pomocné programy príkazového riadka sú súčasťou príkladov sed s ekvivalentnými príkazmi.
- triediť
- hlava
- chvost
- uchopenie
- kat
- NS
- tričko
Poznámka na konci - v príklade ekvivalentné príkazy
V prípade, že vás zaujíma, čo sa v tomto prípade deje - -, je táto poznámka pre vás. Po väčšine príkazov v príkladoch som pridal znak -, aby naznačil, že očakávame, že vstup bude prijatý potrubím. To znamená,
katnejaký súbor| triediť -R-| hlava -1Keď je však prítomný príkaz na ľavej strane potrubia, môžeme nápovedu vynechať nasledovne.
katnejaký súbor| triediť -R | hlava -1To sa dialo s príkazmi - znak za príkazom v príkladoch.
Poznámky k funkciám nastavenia
V prípade, že hľadáte, tu sú funkcie nastavenia pre vyššie uvedené príklady. Výstup získaný pomocou deklarácie -f. Prečítajte si viac o príkaze deklarácie v bash, kde nájdete ďalšie použitia.
Príkazy
slová(){
nasl 100
}
bar()
{
zahodil ---
}
old-php()
{
zahodil 'ereg ($ UA,' Bottybot ')'
}
Spodná čiara
Bavilo ma písať príklady Bash sed a dokonca som po ceste získal niekoľko ďalších trikov. Sed je mocný nástroj príkazového riadka a expresívny jazyk na manipuláciu s textovými súbormi. Ak sa vám páčilo učiť sa o sed, nebojte sa, že je toho ešte veľa, na čo sa musíte dotknúť. Sed na.