logo

Sed parancs Linux/Unix rendszerben példákkal

A Linux „sed” parancsa a stream editor rövidítése. Adatfolyamok (fájlok) reguláris kifejezésekkel történő szerkesztésére szolgál. De ez a szerkesztés nem végleges. Csak a kijelzőn marad, de a tényleges fájltartalom ugyanaz marad.

Elsősorban szöveghelyettesítésre szolgál; Ezenkívül más szövegkezelési műveletekhez is használható, mint például beszúrás, törlés, keresés stb. A sed parancs lehetővé teszi a fájlok szerkesztését azok megnyitása nélkül. A reguláris kifejezések támogatása hatékonyabb szövegmanipulációs eszközzé teszi.

A sed parancs áttekintése

Ez egy Unix segédprogram, amely egy kompakt és egyszerű programozási nyelv segítségével átalakítja és elemzi a szöveget. 1973 és 1974 között Lee E. McMahon, a Bell Labstól integrálta, és ma szinte minden operációs rendszerben jelen van. A sed parancs a korábbi qed (gyorsszerkesztő) és az ed interaktív szerkesztő szkriptelési szempontjain alapult. Ez volt a legkorábbi eszköz a reguláris kifejezések támogatására, és továbbra is aktív marad a szövegfeldolgozásnál, ami a legfontosabb a helyettesítési paranccsal. A híres alternatív eszközök közé tartozik a Perl és az AWK for 'folyam szerkesztés' és egyszerű szöveges karakterlánc-manipuláció.

A sed parancs működési módja

A sed parancs egy szövegfeldolgozó sororientált segédprogram: soronként olvassa be a szöveget egy fájlból vagy bemeneti adatfolyamból egy belső pufferbe, amelyet mintatérként ismerünk. Minden sorolvasás ciklust kezd. A sed parancs egy vagy több műveletet használ, amelyeket egy sed parancsfájl ír le a mintatérben. A programozási nyelvet körülbelül 25 paranccsal működteti, amelyek leírják a szöveg feletti műveleteket.

Az összes bemeneti sor esetében a sed parancs rendszerint a mintateret eredményezi, és a parancsfájl végrehajtása után a ciklust a következő sorral kezdi újra. Más szkriptvég-természetek is elérhetők a parancsfájl-parancsokból és a beállítási lehetőségekből, például az N a következő sor azonnali mintatérbe való felvételéhez, a q a kilépéshez, a d a mintaterület eltávolításához stb. Ennélfogva a sed szkript egy olyan huroktörzsre vonatkozik, amely egy áramvonalból iterál, amelyben a ciklusváltozót és magát a ciklust a sed tartja fenn és implicite.

  • A sed szkript leírható a parancssorban, vagy beolvasható egy elszigetelt fájlon keresztül. A sed parancsfájlban a parancsok extra címet vehetnek fel reguláris kifejezések vagy sorszámok kontextusában. A cím dönti el, hogy mikor kerül végrehajtásra a parancs. Például a 2d csak a d (vagy törlés) parancsot hajtja végre a 2. bemeneti sorban, míg a /^ /d minden szóközzel kezdődő sort eltávolít.
  • A tartási területet, egy elkülönített speciális puffert egyes sed parancsok használhatják felhalmozódó szövegek tárolására a ciklusok között. A sed parancsnyelvének csak két változója van (mintatér és tartási szóköz), valamint GOTO-szerű elágazási funkció. A nyelv azonban Turing-teljes. Ezoterikus sed szkriptek elérhetők számos játékhoz, például tetrishez, sakkhoz, arkanoidhoz és sokobanhoz.
  • A fő hurok a bemeneti adatfolyam összes sorára fut, és a bemenet minden sorában ellenőrzi a sed parancsfájlt. A sed script sorok mind egy minta-művelet pár, amely azt jelzi, hogy milyen mintát kell egyeztetni, és melyik műveletet kell végrehajtani, amely feltételes utasításként másolható. Az alapértelmezett műveletek (mintatér nyomtatása, sor másolása a mintatérbe), bemeneti és kimeneti adatfolyamok, valamint munkaváltozók (tartási tér és mintaterület) implicitek; a főhurok miatt lehetséges tömör egysoros programokat megadni.

A sed parancs használata

    Helyettesítő parancs
    Az alábbi példa a sed parancs legjellemzőbb parancsát és tipikus használatát, azaz a helyettesítést mutatja be. A használat volt a tényleges motiváció a sed parancshoz:
    sed 's/regexp/replacement/g' inputFileName > outputFileNameA sed egyéb parancsai
    Más módok is lehetségesek az egyszerű feldolgozáshoz mintegy 25 sed paranccsal. Az alábbiakban például a d opciót használja a csak szóközt és sorkaraktervéget tartalmazó sorok kiszűrésére:
    sed '/^ *$/d' inputFileName
    A fenti példa az alábbi reguláris kifejezés metakarakterei közül néhányat használ:
    • A pont (^) megegyezik a sor kezdetével.
    • A dollár szimbólum ($) megegyezik a sor befejezésével.
    • A csillag (*) ugyanaz, mint a több vagy nulla korábbi karakter előfordulása.
    • A plusz szimbólum (+) ugyanaz, mint az egy vagy több korábbi karakter előfordulása.
    • A kérdőjel (?) ugyanaz, mint a több vagy nulla korábbi karakter előfordulása.
    • A pont szimbólum (.) pontosan ugyanaz, mint egy karakter.
    sed szűrőnek
    Gyakran a sed parancsot szűrőként használják egy Unix alatti folyamatban:
    $generateData | sed 's/x/y/g'
    A generateData program adatokat generál, a sed parancs pedig egy kis változtatást hajt végre úgy, hogy x-et cserél y helyett.Fájl alapú sed szkriptek
    Gyakran hasznos, ha sok sed parancsot, soronként egy parancsot helyez el egy szkriptfájlba, és használja az -f kapcsolót a parancsok végrehajtásához a fájlból:
    sed -f subst.sed inputFileName > outputFileName

Szintaxis:

 sed [OPTION]... {script-only-if-no-other-script} [input-file]... 

Lehetőségek:

Íme néhány parancssori opció a sed parancshoz:

-n, --csendes, --néma: Erőteljesen lehetővé teszi számunkra, hogy kinyomtassuk a mintateret.

-e script, --expression=script: A parancsfájl hozzáadására szolgál a végrehajtandó parancsokhoz.

-f script-file, --file=script-file: A parancsfájl tartalmának hozzáadására szolgál a végrehajtandó parancsokhoz.

--follow-symlinks: a szimbolikus hivatkozások követésére szolgál a helyben történő feldolgozás során.

latex asztal

-i[SUFFIX], --in-place[=SUFFIX]: a fájlok helyben történő szerkesztésére szolgál (biztonsági mentést készít, ha a SUFFIX opció rendelkezésre áll).

-l N, --vonal-hossz=N: Az 'l' parancs kívánt sortörési hosszának megadására szolgál.

--posix: az összes GNU kiterjesztés letiltására szolgál.

-E, -r, --regexp-extended: Lehetővé teszi a kiterjesztett reguláris kifejezések használatát a szkriptben (a hordozhatóság érdekében használja a POSIX -E-t).

-s, --külön: Ez arra szolgál, hogy a fájlokat különállónak tekintse, nem pedig egyesnek, és folytatja a hosszú adatfolyamot.

--homokozó: Sandbox módban történő működésre szolgál.

-u, --puffereletlen: A minimális adatmennyiség betöltésére szolgál a bemeneti fájlokból, és gyakrabban üríti ki a kimeneti puffereket.

-z, --null-data: A sorok NUL karakterekkel történő elválasztására szolgál.

--Segítség: a súgó kézikönyv megjelenítésére szolgál.

--változat: A verzióinformációk megjelenítésére szolgál.

Példák a sed parancsra

Lássuk a következő példákat:

Jelentkezés az STDIN könyvtárba

A sed parancs nem csak a fájlok kezelésére korlátozódik; Alkalmazhatjuk az STDIN könyvtárra is.

 echo class7 | sed 's/class/jtp/' echo class7 | sed 's/7/10/' cat msg.txt | sed 's/learn/study/' 

A fenti parancsok az első szöveget a második szövegmintára cserélik. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A fenti kimenetből először végrehajtottuk a 'sed' parancsot egy 'class7' karakterláncon, ahol a 'class' változót 'jtp'-re, a 7-et pedig 10-re változtattuk. Ezután végrehajtottuk a 'sed' parancsot az 'msg.txt' adatfolyamon. ' ahol a „tanulás” szó „tanulmányozásra” alakul át.

Globális csere

A korábbi példában az összes „tanulni” szó nem volt „tanulmányozásra” szerkesztve. Minden szó szerkesztéséhez globális 'g' helyettesítőt kell használnunk. Szerkeszti az összes megadott szót egy fájlban vagy karakterláncban.

Szintaxis:

 command | sed 's///g' 

Tekintsük az alábbi példákat:

 echo class7 class9 | sed 's/class/jtp/g' cat msg.txt | sed 's/learn/study/g' 

A fenti parancsok lecserélik az összes megadott szövegmintát. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A fenti kimenetből az 'echo class7 class9 |. parancs végrehajtásával sed 's/class/jtp/g'' az összes 'osztály' 'jtp'-vé alakul, és a 'cat msg.txt' paranccsal | sed 's/learn/study/g'' az összes 'learn'-t 'study'-ra alakították át.

Vonal eltávolítása

A „d” opció lehetővé teszi, hogy egy teljes sort eltávolítsunk a fájlból. Csak egy szót kell megadnunk ebből a sorból a 'd' opcióval, és ez a sor törlődik. De vegye figyelembe, hogy az azonos szót tartalmazó összes sor törlődik. A következőképpen kerül végrehajtásra:

 cat | sed '//d' 

Fontolja meg az alábbi parancsot:

 cat msg.txt | sed '/jtp/d' 

A fenti parancs törli a „jtp” szót tartalmazó sorokat. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A fenti kimenetből a 'cat msg.txt | parancs végrehajtásával sed '/jtp/d' minden, a 'jtp' szót tartalmazó sor törlésre kerül.

A Multiple sed parancs használata

Az '-e' opció lehetővé teszi, hogy egyszerre több sed parancsot hajtsunk végre. Egynél több sed műveletet hajthatunk végre a parancs végrehajtásával:

 sed -e ' ; ' 

Fontolja meg az alábbi parancsot:

hány hónap a q3
 sed -e 's/red/blue/; s/yellow/black/' exm.txt 

A fenti parancs az „exm.txt” fájlban megadott összes műveletet alkalmazza. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

Amint a fenti kimenetből láthatjuk, az összes „piros” szót „kék”-re, a „sárga” szót pedig „feketére” cseréljük. Az alábbi parancsokat is elkülöníthetjük:

 sed -e ' >s/red/blue/; >s/yellow/black/' exm.txt 

Az eredmény ugyanaz lesz, mint a fenti parancs.

Parancsok olvasása fájlból

A sed parancsokat fájlba menthetjük, és bármelyik fájlban egyszerre alkalmazhatjuk. Ezt a '-f' opció megadásával lehet megtenni a következőképpen:

 sed -f 

A fenti parancsból a '' olyan fájl, amely sed parancslistával rendelkezik. Fontolja meg az alábbi parancsot:

 sed -f SedCommands exm.txt 

A fenti parancs az 'exm.txt' 'SedCommand' fájljában található összes parancsot alkalmazza. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A fenti kimenetből a korábbi példában alkalmazott parancsokat használtuk. Tehát a kimenet ugyanaz, mint az előző példában.

Karakterek cseréje

A felkiáltójelet (!) használhatjuk karakterlánchatárolóként. Például le akarjuk cserélni a bash shell-t, és lecseréljük csh shellre az '/etc/passwd'-ben. Ehhez hajtsa végre az alábbi parancsot:

 sed 's//bin/bash//bin/csh/' /etc/passwd 

Ugyanezt az eredményt érhetjük el az alábbi parancs végrehajtásával:

 sed 's!/bin/bash!/bin/csh!' /etc/passwd 

A sed korlátozása

A sed parancs alapvető használata a teljes fájlt feldolgozza. De korlátozhatjuk a sed parancsot, és bármilyen sort megadhatunk. A sed parancs korlátozásának két módja van:

  • Sorok sora.
  • Egy adott vonalhoz illő minta.

Megadhatunk egy számot a sor meghatározásához az alábbiak szerint:

 sed '3s/Red/Blue/' exm.txt 

A fenti parancs a megadott műveletet alkalmazza a harmadik sorban. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A fenti kimenetből csak a harmadik sor módosul.

Megadhatunk egy sor tartományt is. A sorok tartományának megadásához hajtsa végre a parancsot a következőképpen:

 sed '1,3s/Red/Blue/' exm.txt 

A fenti parancs frissíti az 1. és 3. sorban megadott szöveget. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

Szöveg beszúrása és hozzáfűzése

Az „i” és „a” jelző a szöveg beszúrására és hozzáfűzésére szolgál. Az „i” jelző hozzáadja a szöveget a karakterlánc elé, az „a” jelző pedig a karakterlánc utáni szöveg hozzáadására szolgál. Fontolja meg az alábbi parancsot:

 echo 'Another Demo' | sed 'iFirst Demo' 

A fenti parancs beszúrja a szöveget az „Another Demo” szöveg elé. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

Szöveg hozzáfűzéséhez hajtsa végre a parancsot a következőképpen:

 echo 'Another Demo' | sed 'aFirst Demo' 

A fenti parancs hozzáfűzi a szöveget. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

Vonalak módosítása

A „c” jelző egy adott sor módosítására szolgál. Egy sor módosításához hajtsa végre a parancsot a következőképpen:

 sed '3cThis is a modified line.' exm.txt 

A fenti parancs frissíti a harmadik sort. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

Használhatunk reguláris kifejezést egynél több azonos mintázatú sor frissítésére is. Fontolja meg az alábbi parancsot:

 sed '/Apple is /c Line updated.' exm.txt 

A fenti parancs frissíti az összes olyan sort, amelyben az „Apple is” karakterlánc szerepel. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A karakterek transzformációja

Az 'y' zászló a karakterek átalakítására szolgál. A karakterek átalakítása nem korlátozható konkrét előfordulásokra. Karakterek átalakításához hajtsa végre a következő parancsot:

 sed 'y/abc/def/' exm.txt 

A fenti parancs az 'a', 'b', 'c' karaktereket 'd', 'e', ​​'f' karakterré alakítja. vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A sorszámok kinyomtatása

Az '=' jel a sorszám kinyomtatására szolgál. A sorszám kinyomtatásához hajtsa végre a következő parancsot:

 sed '=' exm.txt 

A fenti parancs megjeleníti a fájltartalom sorszámát. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

Az egyenlőségjel az '-n' opcióval a megfelelő szkriptet tartalmazó sor számát határozza meg. Vegye figyelembe az alábbi kimenetet:

 sed -n '/mango/=' exm.txt 

A fenti parancs megjeleníti a „mango” szót tartalmazó sor számát. Vegye figyelembe az alábbi kimenetet:

Linux Sed szűrő

A fenti kimenetből láthatjuk, hogy a 2-es sor a „mango” szót tartalmazza.