sed

Príklady Bash Sed

Príklady Bash Sed
Bash vám umožňuje vykonávať výmenu vzorov pomocou variabilnej expanzie ako ($ var / pattern / replacement). A tak robí sed takto (sed -e 's / pattern / replacement /'). Existuje však viac ako nahradenie vzorov v textových súboroch.  Tu znova objavíme sed, napríklad s ekvivalentnými príkazmi a pracovnými tokmi, ktoré nám pomôžu pri každodenných úlohách.

Nastavenie príkladov sed

Tu je stručný sprievodca, ako si nastaviť príklad, ktorý sa pokúsim príliš nepremysliť.

„Slová“ sú textový súbor obsahujúci čísla 1 až 100. Ak si nie ste istí vytvorením príkazu, pozrite si časť Funkcia Export pre xargs v časti Príkaz Bash Export. Nikdy neviete, že to môže byť na vašom ďalšom rozhovore so skriptovaním.

„Bar“ je textový súbor obsahujúci jeden riadok -.

„Old-php“ je textový súbor obsahujúci riadky starého PHP, ktoré sa zlomia v php7 alebo novšom. (Tip: ereg)

Upozorňujeme, že všetky vyššie popísané funkcie nájdete nižšie v aplikácii Endnote o funkciách nastavenia.

Príklady sed s ekvivalentnými príkazmi

V prostredí príkazového riadku nájdete viac ako jedno riešenie danej úlohy. Väčšinou však chcete ísť cestou, ktorá prináša najmenší odpor. Tu je zoznam príkladov príkazov sed so zodpovedajúcimi ekvivalentnými príkazmi, kde budú niektoré podrobnejšie popísané nižšie.

1. Vytlačte náhodný riadok (ekvivalent triedenia -R - | hlava -1)

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

2.Vytlačiť posledný riadok v súbore (ekvivalent hlavičke -1 -)

sed -n '$ p' -

3. Tlač prvých 10 riadkov v súbore (ekvivalent tlačovej hlavy -n 10 -)

sed '10q' -

4. Vytlačiť prvý riadok v súbore (ekvivalent s chvostom -1 -)

sed -n '1p' -

5. Vymazať všetky inštancie znaku (ekvivalentné s tr -delete '0' -, kde 0 je znak, ktorý chceme vymazať)

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

6. Premeniť súbor csv na tsv (ekvivalent k tr ', "\ t' -)

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

7.Pripojiť riadok k súboru (ekvivalent mačacej lišty -)

sed '$ a ---' -

8. Predbežný riadok pred súborom (ekvivalent cat - bar)

sed '1i ---' -

9. Vytlačiť všetky riadky v súbore (ekvivalent s cat -)

sed -n -e 'p' -

10. Vytlačte riadky zodpovedajúce vzoru (ekvivalentné s grep -e '^ 1' -)

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

11. Odstrániť riadky zodpovedajúce vzoru (ekvivalentné s grep -v -e '^ 1' -)

sed -e '/ ^ 1 / d' -

12. Získajte počet riadkov v súbore (ekvivalent k wc -l -)

sed -n -e '$ =' -

13. Zápis do súboru na pozadí (ekvivalentné príkazové tričko)

sed "w $ 1" -

Príklad použitia sed na implementáciu príkazu tee

Hneď hore je príklad označený ako Zápis do súboru na pozadí. Druh zvukov ako povel odpalisko. No je. Tu sa budeme venovať tomu, ako implementovať funkciu na nahradenie trička v bashe pomocou sed.

Príkazy

tričko ()

test $ # -ekv 1 || návrat;
sed "w $ 1" -

hlavný ()

nasl. 10 | tričko desať;
mačka desať

hlavný

Výkon

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

Tu uvidíte dva výpisy celých čísel od 1 do 10. Prvý je z príkazu seq. Druhú dostaneme od mačky súboru napísaného v tričku. Viem, že je to smiešne, ale funguje to!

Príklad použitia sed na vytlačenie náhodného riadku v súbore

Predpokladajme, že chceme vytlačiť náhodný riadok v súbore pomocou bash a trochu sed. Môžeme to urobiť?? Áno, môžme! Tu je postup.

Implementujte funkciu, ktorá

  1. Získa počet riadkov v súbore, L
  2. Generuje náhodné číslo medzi 1 a L, R
  3. Tlačí R

Táto funkcia očakáva, že vstup bude vedený zvonku.

Príkazy

nejaký riadok ()

funkcia lc ()

sed -n -e '$ =' -
;
funkcia print-line ()

sed -n -e "$ 1 p" -
;
teplota = $ (mktemp);
mačka -> $ temp;
mačka $ temp | riadok tlače $ ((RANDOM% $ (cat $ temp | lc) + 1));
rm $ temp

Príklad použitia (1)

seq 100 | _

Výstup (1)

35

Príklad použitia (2)

zvlnenie https: // linuxhint.com / bash_cut_command / --silent | prúžky | nejaký riadok

V nasledujúcom príklade nájdete použitie značky sed na stripovanie značiek HTML. Všimnite si, že nad príklad niekedy vráti prázdne riadky. Cvičením sa dá vylepšiť.

Používanie sed na tlač riadkov v súbore

Predpokladajme, že chcete implementovať funkciu v bashe na vytlačenie daného riadku v súbore. Pokúšať sa vytlačiť jeden riadok v súbore pomocou slučky v príkazovom riadku bash, head, tail alebo awk je príliš veľa práce na tlačenie riadkov v súbore. Dobre, že máme sed. Výsledná funkcia pomocou sed by bola nasledovná.

Príkazy

riadok tlače ()

sed -n "$ 1 p" -

Teraz sa pozrime, čo sa stane, keď použijeme riadok tlače na slová.

Príkazy

slová | riadok tlače 50

Výkon

50

Dobre. Vyzerá dobre, ale skúsme niečo, čo vyzerá trochu menej triviálne.

Príkazy

deklarovať -xf slov
deklarovať -xf print-line
seq 1 10 $ (slov | wc -l) | xargs -i bash -c "slová | riadok tlače "

Výkon

1
11
21
31
41
51
61
71
81
91

Dobre. Teraz sa to viac podobá! Uvidíte, ako sa dá sed použiť v bash skripte na vytlačenie ktoréhokoľvek riadku v súbore.

Príklady sed bez ekvivalentných príkazov

V prostredí príkazového riadku je niekedy cestou k riešeniu prinášajúcemu najmenší odpor cesta sed; inak nakoniec urobíte viac práce, ako je potrebné. Niektoré príkazy môžu byť uvedené nižšie.

Príkaz na všetky riadky v shellovom skripte

sed -e 's / ^ / # /' -
Odstrániť prvý riadok
sed -e '1d' -
Odstrániť posledný riadok
sed -e '$ 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 -e '/<[^>] *.// g ' -
Inovujte ereg v starom php kóde, aby fungoval v php7 alebo novšom
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Skontrolujte, či je sed staršia ako určitá verzia
sed -e 'v 4.5 ' -

Príklad verzie vetvenia sed v bashe

Vyššie v príkladoch je riadok na kontrolu, či je sed staršia ako určitá verzia, ktorú môžeme použiť na implementáciu vetvenia verzií v bashe, čo je podľa mňa jednoduchšie ako pokúšať sa implementovať funkciu na porovnanie čísel verzií z výstupu sed -version. Jedinou pascou je, že ak existuje staršia verzia sed, ktorá nepodporuje príkaz v, potom máme problémy.

Príkazy

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

vyskúšať verziu ()

echo -n "Verzia $ 1. Dobre. Urob to ";
test-sed-version-at-most $ 1 &&
echo -n "starý";
pravda
||
echo -n "nový"
;
echo “spôsobom.„

hlavný ()

miestne v;
pre v v 4.4,5;
robiť
vyskúšať verziu $ v;
hotový

hlavný

Výkon

Verzia 4.4. Dobre. Urobte to starým spôsobom.
Verzia 4.5. Dobre. Urob to novým spôsobom.

Upozorňujeme, že verzia typu sed, ktorá na mojom stroji beží po zadaní týchto znakov, je 4.4, ktorý by vysvetľoval výstup vyššie. Zároveň bola najnovšia verzia gnu sed 4.7, asi o 3 roky starší ako ten, ktorý mám. Môj sed je starý! V skutočnosti v sed 4.0.6 bol do príkazu verzia pridaný parameter, takže táto stratégia funguje pre ľubovoľný uvedený aspoň v4.0.6, čo je zhovievavé vzhľadom na to, že táto verzia bola vydaná začiatkom roku 2003. Si dobrý.

Urobil som nejaké ďalšie kopanie, vlastne NOVINY, ktoré som čítal z najnovšieho zdrojového kódu. Verzia 4.6 má novú funkciu -debug, ktorá vypíše skript a anotuje výstupné riadky. To vám umožní preložiť sed skripty vygenerované funkciami v bash do kanonickej podoby. V pohode! Nezabudnite, že potrebujete verziu sed, ktorá sa rozvetvuje v bashe. Tu prichádza k slovu tento príklad sedenia.

Príklad funkcie bash používajúcej sed na stripovanie značiek HTML

V príkladoch vyššie je riadok na odstránenie značiek HTML. Poďme to vrhnúť na funkciu bash a použijeme ju na odstránenie všetkých značiek HTML z posledného článku, ktorý som napísal.

Príkazy

strip-tags ()

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

zvlnenie https: // linuxhint.com / bash_cut_command / --silent | strip-tagy

Nemôžem povedať, že je to perfektné, ale aspoň je to čitateľné v termináli.

Príklady sed s pracovnými tokmi: Príklad pracovného toku: bezpečne nahraďte všetky pomocou príkazov find, grep a sed

Dá sa dosť dobre povedať, že zmeny vykonané pomocou sed s možnosťou -i sú nezvratné. Pokiaľ si však nie ste úplne istý, aký text sa má nahradiť, je pravdepodobné, že skončíte s jedným znakom menej, ako ste zamýšľali. Preto v tomto príklade použijeme sed v pracovnom postupe na bezpečné nahradenie textu vo všetkých súboroch, ktoré ste vybrali.

Pracovný tok

  1. Nájsť
  2. grep
  3. sed
Nájsť

Tu vyberiete súbory, ktoré majú byť nahradené. Navrhujem použiť príkaz v tomto zmysle:

nájsť -typ f -name | grep -v -e | xargs -i ..

Napríklad môžete chcieť obmedziť súbory tak, aby nahradzovali súbory PHP, okrem adresárov git repository nasledujúcim spôsobom.

nájsť -typ f-meno \ *.php | grep -v -e '.git '| xargs -i ..

Prečítajte si viac o príkaze xargs v bashe.

grep

Ďalej sa pokúsime priradiť some_pattern k súborom vybraným nasledujúcim spôsobom. Všimnite si, že keďže pre grep používame voľbu -o, výstup zobrazí iba zhodný reťazec, ak existuje.

nájsť -typ f-meno \ *.php | grep -v -e '.git '|
xargs -i grep -e some_pattern -o

Vyššie uvedený príkaz by mal vrátiť zoznam reťazcov vyhovujúcich some_pattern.

sed

Nakoniec chceme nahradiť všetky reťazce vyhovujúce some_pattern. Aby sme to dosiahli, musíme prevádzať grep na sed nasledujúcim spôsobom.

nájsť -typ f-meno \ *.php | grep -v -e '.git '|
xargs -i sed -i -e s / some_pattern / replacement / g

Príkaz grep sa zmení na sed -i a voľba -o bude odstránená. A tu to máte.

Teraz si môžete vyskúšať svoje reťazce, ktoré sa majú nahradiť v sede, namiesto toho, aby ste vyskúšali svoje šťastie.

Vysvetlivky k možnostiam použitým v príkladoch

Tu je zoznam možností použitých v príkladoch sed krátko rozobraných.

Možnosť Popis
-i Upravte na danom mieste. Ak je vstupom súbor (nie je vložený do kanálu), výsledok výrazov prepíše obsah súboru.

Sed jedného prijíma

napr.) sed -n ..

-e -e znamená výraz. Jeho parametrom je výraz v jazyku sed.

Sed prijíma mnohých

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

-n Skryje čiaru, ktorá nie je ovplyvnená výrazom. To znamená, že ak je výrazom príkaz na tlač v jazyku sed, potom riadky, ktoré nie sú uvedené v príkaze na tlač, nebudú zahrnuté do výstupu.

napr.) sed -n ..

Ďalšie informácie o dostupných možnostiach sed nájdete v sed -help

Koncové poznámky k ekvivalentným príkazom použitým v príkladoch

Nasledujúce obslužné programy príkazového riadku sú zahrnuté v príkladoch sed s ekvivalentnými príkazmi.

Koncová poznámka na konci - napríklad ekvivalentné príkazy

Ak vás zaujíma, čo sa v príklade deje - znak, táto poznámka je pre vás. Za väčšinu príkazov v príkladoch som pridal znak -, aby som naznačil, že očakávame, že vstup bude prijatý potrubím. To je,

mačka nejaký súbor | triediť -R - | hlava -1

Keď je však príkaz na ľavej strane k dispozícii, je možné túto nápovedu vynechať nasledovne.

mačka nejaký súbor | triediť -R | hlava -1

To sa dialo so znakom - po príkazoch v príkladoch.

Vysvetlivky k funkciám nastavenia

V prípade, že hľadáte, tu sú funkcie nastavenia vyššie uvedených príkladov. Výstup získaný pomocou vyhlásenia -f. Prečítajte si viac o príkaze declare v bash pre ďalšie použitie.

Príkazy

slová ()

100 seq

bar ()

ozvena ---

old-php ()

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

Spodná čiara

Páčilo sa mi, že som písal príklady Bash sed a dokonca som si popri tom zobral aj pár trikov navyše. Sed je výkonný nástroj príkazového riadku a expresívny jazyk na manipuláciu s textovými súbormi. Ak ste sa radi učili o sede, nebojte sa, ešte je treba dotknúť sa oveľa viac. Sed na.

S ovládaním pomocou myši X-Mouse môžete tlačidlá myši premapovať odlišne pre iný softvér
Možno budete potrebovať nástroj, ktorý by mohol zmeniť ovládanie myši pri každej aplikácii, ktorú používate. Ak je to váš prípad, môžete vyskúšať apli...
Recenzia bezdrôtovej myši Microsoft Sculpt Touch
Nedávno som čítal o Microsoft Sculpt Touch bezdrôtová myš a rozhodol sa ju kúpiť. Po chvíli používania som sa rozhodol s ním podeliť o svoje skúsenost...
Trackpad a ukazovateľ myši AppyMouse na obrazovke pre tablety so systémom Windows
Používateľom tabletov často chýba ukazovateľ myši, najmä keď notebooky bežne používajú. Dotykové smartphony a tablety majú veľa výhod a jediným obmedz...