Példák a Bash Sedre

Bash Sed Examples



A Bash lehetővé teszi a minták cseréjét változó bővítéssel, például ($ {var/pattern/korva}). És szóval, a sed így van -e (sed -e ’s/minta/csere/’). A szöveges fájlokban található minták cseréje azonban több dolgot is tartalmaz. Itt újra felfedezzük a sedet példával, egyenértékű parancsokkal és munkafolyamatokkal, amelyek segítik a napi feladatokat.

Sed példák beállítása

Íme egy gyors útmutató a példa beállításához, amelyet megpróbálok nem túlzásba vinni.







szavakegy szöveges fájl, amely 1 -től 100 -ig terjedő számokat tartalmaz. Ha nem biztos abban, hogy milyen parancsot szeretne létrehozni, olvassa el a Bash Export Command xargs exportálása funkcióját. Soha nem tudhatod, hogy ez a következő shell script interjún lesz.



rúdegy szöveges fájl, amely egyetlen sort tartalmaz -.



old-phpegy szövegfájl, amely régi PHP sorokat tartalmaz, amelyek megszakadnak a php7 vagy újabb verziójában. (Tipp: ereg)





Ne feledje, hogy az összes fent leírt funkció megtalálható a Beállítási funkciókról szóló Endnote alatt.

Sed példák egyenértékű parancsokkal

Parancssori környezetben azt találja, hogy egy adott feladatra több megoldás is létezik. Azonban többnyire azt az utat akarja járni, amely a legkisebb ellenállást eredményezi. Az alábbiakban felsoroljuk a sed parancsok példáit a megfelelő megfelelő parancsokkal, amelyek közül néhányat az alábbiakban részletesen ismertetünk.



1. Nyomtasson egy véletlenszerű sort (egyenértékű a -R -| fej -1 rendezéssel)

sed -n '$ ((Véletlenszerű % 100)) p '-

2. Nyomtassa ki a fájl utolsó sorát (egyenértékű a -1 fejjel -)

sed -n '$ p'-

3. Nyomtassa ki az első 10 sort egy fájlban (egyenértékű a -n 10 fejjel)

sed '10q'-

4. Nyomtassa ki az első sort egy fájlban (egyenértékű a -1 -es farokkal -)

sed -n '1p'-

5. Törölje az összes karakterpéldányt (egyenértékű a tr –delete ’0’ értékkel, ahol 0 a törölni kívánt karakter)

sed -És 's / 0 // g'-

6. Konvertálja a csv fájlt tsv -re (egyenértékű a tr ',' ' t' -)

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

7. Sor hozzáadása a fájlhoz (megfelel a macskasávnak -)

sed '$ a ---'-

8. Sor előtagja a fájlhoz (egyenértékű a macskasávval)

sed '1i ---'-

9. Nyomtassa ki az összes sort a fájlban (megfelel a macskának -)

sed -n -És 'p'-

10. Nyomtasson a mintának megfelelő sorokat (egyenlő a grep -e ’^1’ -értékkel)

sed -n -És '/^1/ p'-

11. Törölje a mintának megfelelő sorokat (egyenlő grep -v -e ’^1’ -)

sed -És '/^1/ d'-

12. Szerezze meg a fájl sorainak számát (egyenértékű a wc -l -)

sed -n -És '$ ='-

13. Írjon egy fájlba a háttérben (egyenértékű tee parancs)

sed 'ban ben{1} USD'-

Példa a sed használatára a tee parancs végrehajtásához

Közvetlenül fent van egy példa a Fájlba írás címkével a háttérben. Valahogy úgy hangzik, mint a tee parancs. Hát igen. Itt részletesen kifejtjük, hogyan valósíthatunk meg egy funkciót a bas bash -ban a sed használatával.

Parancsok

póló ()
{
teszt $ {#} -eq 1 || Visszatérés;
sed 'ban ben{1} USD'-
}
fő-()
pólóez;
macskaez

fő-

Kimenet

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

Itt láthatja az 1 és 10 közötti egész számok két listáját. Az első a seq parancsból származik. A másodikat a pólóban írt fájl macskájától kapjuk. Tudom, hogy nevetséges, de működik!

Példa a sed használatával véletlenszerű sor kinyomtatására a fájlban

Tegyük fel, hogy egy véletlenszerű sort szeretnénk kinyomtatni egy fájlban bash és egy kis sed használatával. Meg tudjuk csinálni? Igen! Itt van, hogyan.

Olyan funkciót valósítson meg, amely

  1. Lekéri a fájl sorainak számát, L
  2. Véletlen számot generál 1 és L között, R
  3. Nyomtat R.

A függvény elvárja, hogy a bemenet kívülről legyen vezetékes.

Parancsok

néhány sor()
{
funkciólc()
{
sed -n -És '$ ='-
};
funkciónyomtatási vonal()
{
sed -n -És '{1} USDp '-
};
hőmérséklet= $( mktemp );
macska-> $ {temp};
macska $ {temp} |print-line $((VÉLETLEN%$( macska $ {temp} |lc)+1 ));
rm $ {temp}
}

Példahasználat (1)

sor 100 |_

Kimenet (1)

35

Példahasználat (2)

curl https://linuxhint.com/bash_cut_command/ --csendes |szalagcímkék|néhány sor

Lásd az alábbi példát, a sed használatával a HTML -címkék eltávolításához. Ne feledje, hogy a túl példa néha üresen tér vissza üres sorok esetén. Gyakorlatként javítható.

A sed használata sorok nyomtatására a fájlban

Tegyük fel, hogy egy függvényt szeretne végrehajtani bash -ban egy adott sor kinyomtatásához a fájlban. Ha egyetlen sort szeretne kinyomtatni egy fájlban bash, head, tail vagy awk ciklus használatával, túl sok munka a fájlban lévő sorok kinyomtatásához. Még jó, hogy megvan. A kapott függvény a sed használatával a következő lenne.

Parancsok

nyomtatási vonal()
{
sed -n '{1} USDp '-
}

Most nézzük meg, mi történik, ha nyomtatási sort használunk a szavakon.

Parancsok

szavak|nyomtatási vonalötven

Kimenet

ötven

Oké. Jól néz ki, de próbáljunk ki valamit, ami egy kicsit kevésbé triviálisnak tűnik.

Parancsok

kijelent -xfszavak
kijelent -xfnyomtatási vonal
sor 1 10$(szavak| WC -az ) | xargs-énbash -c 'szavak | print-line {} '

Kimenet

1
tizenegy
huszonegy
31
41
51
61
71
81
91

Oké. Most ez inkább hasonlít! Látja, hogy a sed hogyan használható egy bash szkriptben a fájl bármely sorának kinyomtatására.

Sed példák egyenértékű parancsok nélkül

Parancssori környezetben néha a legkisebb ellenállást eredményező megoldáshoz vezető út a sed mód; ellenkező esetben a kelleténél több munkát végez. Az alábbiakban néhány parancs szerepelhet.

Parancsoljon minden sort egy shell parancsfájlban

sed -És 's/^/#/'-
Törölje az első sort
sed -És '1d'-
Törölutolsóvonal
sed -És '$ d'-
Szúrjon be egy sort a mintához tartozó sorok elé
sed '/0 $/i ---'-
Szúrjon be egy sort a mintának megfelelő sorok után
sed ' / 0 $ / ---'-
Húzza ki a html címkéket
sed -És 's /†*.// g'-
Frissítés eregban benrégi php kód futtatásáhozban benphp7 vagy újabb
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Jelölje beha sedkorábbi, mint egy bizonyos verzió
sed -És 'v 4.5'-

Példa a bas verzióban elágazó sed verzióra

A példák fölött található egy sor arra, hogy ellenőrizze, hogy a sed korábbi -e, mint egy bizonyos verzió, amellyel végrehajthatjuk a bash verzióban történő elágazást, ami szerintem egyszerűbb, mint egy olyan függvény megvalósítása, amely összehasonlítja a sed számokat a sed –version kimenetről . Ez az egyetlen buktató, hogy ha van egy korábbi verziója a sednek, amely nem támogatja a v parancsot, akkor bajban vagyunk.

Parancsok

teszt-sed-verzió-legfeljebb() {
kidobta -n | sed 'v{1} USD'-2> /dev/nulla
}
próbaverzió()
{
kidobta -n 'Változat{1} USD. Oké. Csináld meg ';
teszt-sed-verzió-legfeljebb{1} USD && {
kidobta -n 'régi';
igaz
} || {
kidobta -n 'új'
};
kidobta 'módon'.
}
fő-()
{
helyiv;
számáravban ben 4.{4,5};
tedd
próbaverzió$ {v};
Kész
}
fő-

Kimenet

Változat4.4. Oké. Csináld a régi módon.
Változat4.5. Oké. Csináld új módon.

Ne feledje, hogy a gépen futó sed verzió ezen karakterek beírása után 4.4 -es, ami megmagyarázza a fenti kimenetet. Ezenkívül a gnu sed legújabb verziója 4.7 volt, körülbelül 3 évvel idősebb, mint én. A sedem régi! Valójában a sed 4.0.6 -ban egy paramétert adtak hozzá a verzióparancshoz, így ez a stratégia bármelyik legalább v4.0.6 verziónál működik, ami engedékeny, tekintve, hogy a verzió 2003 elején jelent meg.

Némi extra ásást végeztem, valójában a NEWS kiolvastam a legújabb forráskódból. A 4.6 -os verzió új funkcióval rendelkezik - a hibakeresés, amely letörli a szkriptet és megjegyzi a kimeneti sorokat. Ez lehetővé teszi, hogy a bash függvények által generált sed parancsfájlokat lefordítsa kanonikus formába. Menő! Csak ne felejtse el, hogy szüksége van a sed verzióra, amely elágazik a bash -ban. Ez az a hely, ahol ez a példamutató szó esik.

Példa bash függvényre a sed használatával a HTML -címkék eltávolításához

A fenti példákban egy sor található a HTML -címkék eltávolításához. Dobjuk ezt egy bash függvénybe, és használjuk fel az utolsó HTML -címkék eltávolítására az utolsó cikkből, amit írtam.

Parancsok

szalagcímkék()
{
sed -És 's /†*.// g'-
}
curl https://linuxhint.com/bash_cut_command/ --csendes |szalagcímkék

Nem mondhatom, hogy tökéletes, de legalább olvasható a terminálon.

Sed példák munkafolyamatokkal: Példa munkafolyamat: biztonságosan cserélje ki az összeset a find, grep és sed használatával

Nyugodtan mondhatjuk, hogy a sed használatával a -i opcióval végrehajtott változtatások visszafordíthatatlanok. Hacsak nem teljesen biztos abban, hogy melyik szöveget kell kicserélni, akkor valószínűleg a tervezettnél eggyel kevesebb karaktert kap. Éppen ezért ebben a példában a sedet használjuk egy munkafolyamatban, hogy biztonságosan lecseréljük a szöveget az összes kiválasztott fájlban.

Munkafolyamat

  1. megtalálja
  2. markolat
  3. sed
megtalálja

Itt kiválaszthatja a cserélni kívánt fájlokat. Azt javaslom, hogy használjon egy parancsot a következő sorokban:

megtalálja -típusf-név | markolat -v-És| xargs-én ...

Például korlátozhatja a fájlokat a PHP fájlok cseréjére, kivéve a git lerakatkönyvtárakat az alábbiak szerint.

megtalálja -típusf-név*.php| markolat -v -És '.megy' | xargs -én...

Olvassa el a bash xargs parancsát.

markolat

Ezután megpróbáljuk egyeztetni some_pattern fájlokat az alábbiak szerint. Ne feledje, hogy mivel a -o opciót használjuk a grep számára, a kimenet csak akkor jeleníti meg a megfelelő karakterláncot, ha van ilyen.

megtalálja -típusf-név*.php| markolat -v -És '.megy' |
xargs -én markolat -Ésvalami_minta-vagy

A fenti parancsnak vissza kell adnia a some_patternnek megfelelő karakterláncok listáját.

sed

Végül le akarjuk cserélni az összes string -t, amely megfelel néhány_mintának. Ehhez a grep -et sed -re kell alakítanunk az alábbiak szerint.

megtalálja -típusf-név*.php| markolat -v -És '.megy' |
xargs -én sed -én -Éss/valami_minta/csere/g

A grep parancs sed -i lesz, és a -o opció eltávolításra kerül. És ott van.

Most ellenőrizheti, hogy milyen karakterláncokat fognak kicserélni a sed -ben, ahelyett, hogy tesztelné a szerencséjét.

Végjegyzetek a példákban használt opciókhoz

Itt található a röviden tárgyalt sed példákban használt lehetőségek listája.

választási lehetőség Leírás
-én Szerkessze a helyén. Ha a bemenet egy fájl (nincs bekötve), akkor a kifejezések eredménye felülírja a fájl tartalmát.

Sed egyet elfogad

pl) sed -n…

-És -e a kifejezést jelenti. Paramétere a sed nyelvű kifejezés.

Sed sokakat elfogad

pl) sed -e'expr1 '-e'expr2'

-n Elrejti a kifejezés által nem érintett sort. Ez azt jelenti, hogy ha a kifejezés egy nyomtatott utasítás a sed nyelven, akkor a nyomtatott utasításban nem szereplő sorok nem fognak szerepelni a kimenetben.

pl) sed -n…

A rendelkezésre álló sed lehetőségekről bővebben a sed –help

Záró megjegyzések a példákban használt egyenértékű parancsokról

A következő parancssori segédprogramok szerepelnek a sed példákban egyenértékű parancsokkal.

  • fajta
  • fej
  • farok
  • markolat
  • macska
  • NS
  • póló

Befejezés a zárójelben - például ekvivalens parancsok

Ha kíváncsi, mi történik a példában szereplő karakterrel, ez a megjegyzés az Ön számára. Hozzáadtam egy - karaktert a legtöbb parancs után a példákban, jelezve, hogy a bemenet csövön keresztül történő fogadását várjuk. Vagyis

macskanéhány fájl| fajta -R-| fej -1

Ha azonban a cső bal oldalán lévő parancs megjelenik, a következőképpen kihagyhatjuk a tippet.

macskanéhány fájl| fajta -R | fej -1

Ez történt a példákban a - karakter parancsokkal.

Befejező megjegyzések a beállítási funkciókhoz

Ha keres, itt vannak a fenti példák beállításának funkciói. A deklaráció -f használatával kapott kimenet. Olvasson többet a deklarálás parancsról a bash -ban a további használathoz.

Parancsok

szavak()
{
sor 100
}
rúd()
{
kidobta ---
}
old-php()
{
kidobta 'ereg ($ UA,' Bottybot ')'
}

A lényeg

Élveztem a Bash sed példák írását, és még néhány extra trükköt is összeszedtem. A Sed erőteljes parancssori segédprogram és kifejező nyelv a szöveges fájlok kezelésére. Ha szeretett tanulni a sedről, ne aggódjon, még sok minden van még. Sed tovább.