sed

Bash Sed Példák

Bash Sed Példák
A Bash lehetővé teszi a minta cseréjét olyan változó kiterjesztéssel, mint ($ var / pattern / helyettesítő). És így, a sed így tetszik (sed-e 's / minta / csere /'). Azonban többről van szó, mint a minták cseréjéről a szöveges fájlokban.  Itt újra felfedezzük a sedet példákkal, egyenértékű parancsokkal és munkafolyamatokkal, amelyek segítenek a mindennapi feladatokban.

A sed példák beállítása

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

A „szavak” egy szöveges fájl, amely az 1–100 számokat tartalmazza. Ha nem biztos a létrehozásának parancsában, olvassa el az xargs exportálása funkciót a Bash Export parancsban. Soha nem tudhatod, hogy ez a következő shell-szkriptelési interjúban szerepel-e.

A „bar” egy sort tartalmazó szövegfájl -.

Az „old-php” egy olyan szöveges fájl, amely a régi PHP sorait tartalmazza, amelyek betörnek a php7 vagy újabb verzióiba. (Tipp: ereg)

Ne feledje, hogy az összes fent leírt funkció megtalálható az alábbiakban: A telepítéshez szükséges funkciók végjegyzete.

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

A parancssori környezetben egynél több megoldás létezik egy adott feladatra. Azonban többnyire a legkevesebb ellenállást kiváltó utat akarja megtenni. Az alábbiakban felsoroljuk a sed parancsok példáit a megfelelő ekvivalens parancsokkal, amelyek közül néhányat alább részletesen ismertetünk.

1. Véletlenszerű vonal nyomtatása (megfelel a -R - | head -1 rendezésnek)

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

2.Nyomtassa ki az utolsó sort a fájlban (egyenértékű a -1 fejjel -)

sed -n '$ p' -

3. Az első 10 sort kinyomtatja egy fájlban (egyenértékű a head -n 10 - fejlettel)

sed '10q' -

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

sed -n '1p' -

5. Törölje a karakter összes példányát (egyenértékű a tr -delete '0' - val, ahol 0 a törölni kívánt karakter)

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

6. Csv fájl konvertálása tsv formátumra (egyenértékű tr ', "\ t' -)

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

7.Sor hozzáfűzése a fájlhoz (egyenértékű a macskasávval -)

sed '$ a ---' -

8. Sor hozzáadása a fájlhoz (egyenértékű a cat-barral)

sed '1i ---' -

9. Az összes sor kinyomtatása a fájlban (egyenértékű a macskával)

sed -n -e 'p' -

10. Nyomtasson egy mintának megfelelő vonalakat (egyenértékű a grep -e '^ 1' -)

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

11. A mintának megfelelő sorok törlése (egyenértékű a grep -v -e '^ 1' - karakterrel)

sed -e '/ ^ 1 / d' -

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

sed -n -e '$ =' -

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

sed "w $ 1" -

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

Rögtön fent van egy példa, amely a háttérben egy Írjon fájlba feliratú. Olyan hangok, mint a tee parancs. Nos, az. Itt kibővítjük, hogyan lehet megvalósítani egy funkciót a tee in bash cseréjére sed segítségével.

Parancsok

tee ()

teszt $ # -eq 1 || Visszatérés;
sed "w $ 1" -

fő ()

10. sz póló tíz;
tízes macska

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-től 10-ig terjedő egész számok két felsorolását. Az első a seq parancsból származik. A másodikat a tee-be írt fájl macskájától kapjuk. Tudom, hogy nevetséges, de működik!

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

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

Végezzen el egy olyan függvényt, amely

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

A függvény azt várja, hogy a bemenet kívülről érkezzen.

Parancsok

néhány sor ()

függvény lc ()

sed -n -e '$ =' -
;
függvény nyomtatási sor ()

sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
macska -> $ temp;
macska $ temp | nyomtatási sor $ ((RANDOM% $ (cat $ temp | lc) + 1));
rm $ temp

Példa felhasználásra (1)

100. sz _

Kimenet (1)

35

Példa felhasználásra (2)

göndörítés https: // linuxhint.com / bash_cut_command / --silent | szalagcímkék | néhány soros

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 az over példa néha üreset ad vissza üres sorok esetén. Gyakorlatként javítható.

A sed használatával vonalak nyomtatása egy fájlban

Tegyük fel, hogy a bash-ban egy függvényt szeretne megvalósítani egy adott sor kinyomtatásához egy fájlban. Ha megpróbál egyetlen sort kinyomtatni egy fájlban egy hurokkal a bash, a fej, a farok vagy az awk segítségével, túl sok munka ahhoz, hogy sorokat nyomtasson ki egy fájlban. Még jó, hogy van sed. A sed alkalmazásával kapott eredmény a következő lenne.

Parancsok

nyomtatási sor ()

sed -n "$ 1 p" -

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

Parancsok

szavak | nyomtatási sor 50

Kimenet

50

oké. Jól néz ki, de próbáljunk ki valamit, ami kissé kevésbé triviális.

Parancsok

deklarálja -xf szavakat
deklarálja -xf print-line
1 10 $ (szavak | wc -l) | xargs -i bash -c "words | print-line "

Kimenet

1
11
21
31
41
51
61
71
81
91

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

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

Parancssori környezetben néha a legkevesebb ellenállást eredményező megoldás elérési útja a sed módszer; különben végül több munkát végez, mint amire szükség van. Néhány parancs az alábbiakban szerepelhet.

Parancsoljon minden sort egy shell szkriptben

sed -e 's / ^ / # /' -
Törölje az első sort
sed -e '1d' -
Törölje az utolsó sort
sed -e '$ d' -
Helyezzen be egy sort a mintának megfelelő vonalak elé
sed '/ 0 $ / i ---' -
Helyezzen be egy sort a mintának megfelelő vonalak után
sed '/ 0 $ / ---' -
Csíkolja ki a html címkéket
sed -e's /<[^>] *.// g ' -
Frissítse az ereg-et a régi php-kódban, hogy php7 vagy újabb verzióban fusson
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Ellenőrizze, hogy a sed korábbi-e, mint egy bizonyos verzió
sed -e 'v 4.5 ' -

Példa a bash-ban elágazó sed változatra

A példák felett van egy sor annak ellenőrzésére, hogy a sed korábbi-e, mint egy bizonyos verzió, amelyet használhatunk a verzió elágazás megvalósításához a bash-ban, ami véleményem szerint könnyebb, mint megpróbálni olyan funkciót végrehajtani, amely összehasonlítja a sed -version kimeneti verziószámokat. Ez az egyetlen buktató, hogy ha van a sed korábbi verziója, amely nem támogatja a v parancsot, akkor bajban vagyunk.

Parancsok

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

próbaverzió ()

echo -n "$ 1 verzió. oké. Tedd a ";
test-sed-version-at-maximum $ 1 &&
visszhang -n "régi";
igaz
||
visszhang -n "új"
;
visszhang "módon."

fő ()

helyi v;
a v-re 4-ben.4,5;
csinálni
try-version $ v;
Kész

fő-

Kimenet

4. verzió.4. oké. Csináld a régi módon.
4. verzió.5. oké. Csináld új módon.

Ne feledje, hogy a gépemen futó sed verziója e karakterek beírásakor 4.4. ábra, amely megmagyarázná a fenti kimenetet. Ugyanakkor a gnu sed legújabb verziója 4 volt.7, kb. 3 évvel idősebb, mint nálam. A sedem öreg! Valójában a sed 4-ben.0.A 6. ábrán egy paramétert adtak a verzió parancshoz, így ez a stratégia minden említett legalább v4 esetén működik.0.6, ami engedékeny, tekintve, hogy a verzió 2003 elején jelent meg. Jó vagy.

Végeztem néhány extra ásást, valójában a HÍREK kiolvasva a legújabb forráskódot. 4. verzió.A 6-nak van egy új funkciója, a -debug, amely kiírja a szkriptet és megjegyzi a kimeneti sorokat. Ez lehetővé tenné a bash függvények által generált sed szkriptek fordítását kanonikus formában. Menő! Csak ne felejtsd el, hogy a bash-ban elágazó sed verzióra van szükséged. Itt jön szóba ez a sed példa.

Példa bash függvényre, amely sed-et használ a HTML-címkék eltávolításához

A fenti példákban van egy sor a HTML-címkék eltávolítására. Vessük ezt egy bash függvénybe, és használjuk az összes HTML-címke eltávolításához az utolsó cikkből, amelyet írtam.

Parancsok

szalagcímkék ()

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

göndörítés https: // linuxhint.com / bash_cut_command / --silent | szalagcímkék

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

Példa munkafolyamatokkal: Példa munkafolyamatra: biztonságosan cserélje le az összeset a find, a grep és a sed használatával

Nyugodtan mondhatjuk, hogy a sed használatával az -i opcióval végzett változtatások visszafordíthatatlanok. Vagyis, hacsak nem teljesen biztos abban, hogy milyen szöveget kell kicserélni, akkor valószínűleg egynél kevesebb karakter lesz a kitűzöttnél. Ezért ebben a példában a sed-et használjuk a munkafolyamatban a szöveg biztonságos cseréjéhez az összes kiválasztott fájlban.

Munkafolyamat

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

Itt válassza ki a kicserélendő fájlokat. Azt javaslom, hogy használjon egy parancsot ezek mentén:

find -type f -name | grep -v -e | xargs -i…

Például korlátozhatja a fájlokat a PHP-fájlok helyettesítésére a git-tárház könyvtárak kivételével az alábbiak szerint.

find -type f -name \ *.php | grep -v -e '.git '| xargs -i…

További információ az xargs parancsról a bash-ban.

grep

Ezután megpróbáljuk egyeztetni a some_pattern-t az alább kiválasztott fájlokban. Ne feledje, hogy mivel az -o opciót használjuk a grep számára, a kimenet csak egyezett karakterláncot mutat, ha van ilyen.

find -type f -name \ *.php | grep -v -e '.git '|
xargs -i grep -e néhány_minta -o

A fenti parancsnak vissza kell adnia a some_pattern karakterláncnak megfelelő listát.

sed

Végül ki akarjuk cserélni az összes stringet, amely megfelel a some_pattern-nek. Ehhez át kell alakítanunk a grep-et sed-be az alábbiak szerint.

find -type f -name \ *.php | grep -v -e '.git '|
xargs -i sed -i -e s / néhány_minta / csere / g

A grep parancs sed -i lesz, és az -o opció törlődik. És itt van.

Most megnézheti, hogy korábban milyen szerelvényeket cserélnek le sed-ben, ahelyett, hogy tesztelné a szerencséjét.

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

Az alábbiakban felsoroljuk a röviden tárgyalt sed példákban használt lehetőségeket.

választási lehetőség Leírás
-én Szerkesztés a helyén. Ha a bemenet fájl (nem továbbítva), akkor a kifejezések eredménye felülírja a fájl tartalmát.

Sed elfogad egyet

pl. sed -n…

-e -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ést nem érintő vonalat. Ez az, ha a kifejezés egy nyomtatott utasítás az sed nyelven, akkor a nyomtatási utasításban nem szereplő sorok nem lesznek benne a kimenetben.

pl. sed -n…

A rendelkezésre álló sed opciókról további információt a sed -help oldalon talál

Az egyenértékű parancsokra vonatkozó záró megjegyzések a példákban szerepelnek

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

Végjegyzet a zárójelre - például egyenértékű parancsok

Abban az esetben, ha kíváncsi vagy, mi történik a példában a - karakterrel, ez a jegyzet az Ön számára szól. A példákban a legtöbb parancs után egy - karaktert adtam hozzá, hogy arra utaljak, hogy a bemenet csövön keresztüli fogadására számítunk. Vagyis,

cat some-file | rendezés -R - | fej -1

Ha azonban a pipa bal oldalán található parancs létezik, a következőképpen elhagyhatjuk a célzást.

cat some-file | rendezés -R | fej -1

Ez történt a példákban szereplő - karakter után parancsokkal.

Végjegyzetek a funkciókhoz a beállításhoz

Ha keres, itt találhatók a fenti példák beállításának funkciói. A kimenet a deklaráljuk -f használatával. További felhasználásokért olvassa el a bash deklarálja parancsot.

Parancsok

szavak ()

100. sz

rúd ()

visszhang ---

old-php ()

echo '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 felvettem útközben. A Sed egy hatékony parancssori segédprogram és kifejező nyelv a szöveges fájlok kezeléséhez. Ha szerette megismerni a sed-et, ne aggódjon, még sok minden még érintenie kell. Sed tovább.

Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...
Ezekkel az ingyenes eszközökkel adja hozzá az egérmozdulatokat a Windows 10 rendszerhez
Az elmúlt években a számítógépek és az operációs rendszerek nagymértékben fejlődtek. Volt idő, amikor a felhasználóknak parancsokkal kellett navigálni...
Az egér mozgásának vezérlése és kezelése több monitor között a Windows 10 rendszerben
Dual Display Mouse Manager lehetővé teszi az egér mozgásának vezérlését és konfigurálását több monitor között, lassítva annak mozgását a határ közeléb...