Üdvözöljük az ubuntu.hu oldalán

Itt megtalálhatja a rendszerrel, illetve a nyílt forráskódú alkalmazásokkal kapcsolatos információkat, érdekességeket. Csatlakozzon a beszélgetésekhez, blogoljon, segítse Ön is a közösséget. Jó fórumozást kívánunk!
Abszolút kezdőBlogok

Sed, avagy visszaper és nem pöröl

Általában a valóságban előforduló dolgokból szeretek kiindulni.

Többször is előjött a közelmúltban olyan fórumtéma, hogy a rendszert indítva a bootolás elakadt, az Ubuntu vészhelyzeti, azaz emergency módba került. Ismétlődően az állt a probléma hátterében, hogy az /etc/fstab fájlba, jellemzően verziófrissítés során, egy téves sor került. Ezt helyreállítási módban illetve akár live vagy egy másik telepített rendszer alól, a problémás rendszer fstab fájljában lévő sor kikommentelésével, remekül lehet orvosolni.
Ilyenkor néha úgy éreztem, hogy néhány már amúgy is rendelkezésre álló információt (mi a problémás rendszer fstab fájljának tartalma, ha másik rendszer alól vagyunk, akkor hová van felcsatolva a problémás rendszer rendszerpartíciója) felhasznalva egyetlen sed parancsot lehetne adni a kérdezőnek és meg is volnánk.

@Kittus2 adott tegnap egy linket nekem balacy remek cikkére, elég jól magyaráz szerintem, de ez részemre nem volt elég elolvastam ezt is.

Csak most értettem meg egy fontos dolgot, ami nem csak a Sedre igaz. Így utólag már persze egyszerű, ez nem más, mint a „visszaper”. És ezt eddig én még sehol nem láttam hangsúlyosan leírva, vagy elsiklottam felette.
Ez az a jel: \
Ez az, ami az én billentyűzetemen a AltGr+Q kombinációra jelenik meg.

Teszek egy kísérletet arra, hogy én is elmagyarázzam:
Kezdjük azzal, hogy azok a parancsok, melyek az internetes leírásokban a legtöbbször megtalálhatóak, azok, melyeket mi itt távoli segítségnyújtásnál használunk, a parancs egyes részeit a SZÓKÖZ-zel választják el egymástól.
Példának egy analógia:
parancs forrás cél
Valami picit konkrétabb:
cp /home/csuhas/1.txt /home/csuhas/Letöltések
Megpróbálom neked részekre bontani:
A cp a copy, azaz másolás szóból jön, vagyis: Másold
a-home-per-csuhas-per-1.txt(fájlt)
a-home-per-csuhas-per-Letöltések(könyvtárba)
Látod? A szóköz választja el a parancs három részét egymástól.

Na most, mi történik, ha én az „1 napom.txt” nevű fájlt szeretném ugyaninnen, ugyanígy másolni?
Elsőre azt gondolnám, hogy ez lesz az:
cp /home/csuhas/1 napom.txt /home/csuhas/Letöltések
De hibára fut. Miért?
Kezdjük ezt is nézni az elejétől.
cp, azaz másold, eddig rendben.
a-per-home-per-csuhas-per-1(fájlt)... Hoppá! Nézd csak! Itt egy szóköz! Nagy valószínűséggel már itt elakad, mert nincs ilyen nevű fájlom..., de ha tovább is megy: A `napom.txt'-be? Hol? Itt? Mi van?! Ebből szinte borítékolhatóan hibaüzenet lesz, de, hogy nem az történik, amit szerettem volna, az biztos.
Mivel szóközökkel határól, a pluszban megjelenő szóköz(ök) összezavarják.

Itt jön be a „visszaper” jelentősége, mely arra szolgál, hogy figyelmeztesse a „parancssort”, hogy figyelj, itt most egy különleges karakter jön, nem egy határoló!
cp /home/csuhas/1\ napom.txt /home/csuhas/Letöltések
Mivel a fájlom neve „1 napom.txt”, ezért a parancssorba ezt úgy írom be, hogy
1
utána teszek egy \ jelet, ez mondja, hogy itt egy különleges karakter jön, valami, ami NEM neked szól, ami NEM határoló (vagy más az adott parancssoros alkalmazás által használt utasítást jelentő karakter)
és utána folytatom a fájl nevének gépelését: szóköz-napom.txt.
Ezáltal tudni fogja, hogy az „1” és a „napom” közötti szóköz nem határoló, az 1-szóköz-napom.txt összetartozik, a következő szóköz lesz a határoló (hacsak azelőtt is nem szerepel egy „\”, mert akkor az is ide tartozik és az azt követő szóköz lesz a határoló...).
Remélem valamennyire érthetően sikerült megfogalmazni és egy kicsit át tudtam neked adni ezt a dolgot, ha eddig te sem ismerted ezt!

Miután ezt megértettem már a Seddel sem volt olyan nehéz dolgom.
A Sed bizonyos részeket a / jellel határolja el egymástól.
Ami nekem kell cserélgetős parancs, annak a tanulópéldája a
sed 's/alma/körte/' alma.txt volt.
Ez az „alma” szavakat „körte” szavakra az alma.txt könyvtárban.
Nagyjából meg is értettem a tananyagot, de amikor a tesztre használt fstab nevű fájlomban a
# /dev/sde1
sort próbáltam kicserélni
/dev/sde1-re bizony először pórul jártam.
Ez nem is csoda, hiszen vannak benne per jelek és, ha nem jelzem, hogy ez(ek) különleges karakter(ek), akkor összezavarják az alkalmazást, hiszen az per jelekkel határol, sőt maga a # is egy különleges karakter...

A felhasználóm könyvtárában létrehoztam egy Practice nevű könyvtárat és abba bemásoltam a rendszerem /etc/fstab fájlját, hogy itt, biztonságos környezetben gyakoroljak.
A sed -i 's/\# \/dev\/sde1/ \/dev\/sde1/g' /home/csuhas/Practice/fstab paranccsal szépen kiszedtem a # jelet az amúgy 11. sorban lévő szöveg elejéről.
A sed -i 's/ \/dev\/sde1/\# \/dev\/sde1/g' /home/csuhas/Practice/fstab paranccsal meg odatettem (visszatettem).

Biztos lehet ezt másképp is, jobban is, de én ennek is nagyon örülök, hiszen ezt szerettem volna! Szuper! Szerintem, ha szükséges, ezt így már tudom majd használni arra, amire gondoltam.

Hozzászólások (2)

Általában a valóságban előforduló dolgokból szeretek kiindulni.

Többször is előjött a közelmúltban olyan fórumtéma, hogy a rendszert indítva a bootolás elakadt, az Ubuntu vészhelyzeti, azaz emergency módba került. Ismétlődően az állt a probléma hátterében, hogy az /etc/fstab fájlba, jellemzően verziófrissítés során, egy téves sor került. Ezt helyreállítási módban illetve akár live vagy egy másik telepített rendszer alól, a problémás rendszer fstab fájljában lévő sor kikommentelésével, remekül lehet orvosolni.
Ilyenkor néha úgy éreztem, hogy néhány már amúgy is rendelkezésre álló információt (mi a problémás rendszer fstab fájljának tartalma, ha másik rendszer alól vagyunk, akkor hová van felcsatolva a problémás rendszer rendszerpartíciója) felhasznalva egyetlen sed parancsot lehetne adni a kérdezőnek és meg is volnánk.

@Kittus2 adott tegnap egy linket nekem balacy remek cikkére, elég jól magyaráz szerintem, de ez részemre nem volt elég elolvastam ezt is.

Csak most értettem meg egy fontos dolgot, ami nem csak a Sedre igaz. Így utólag már persze egyszerű, ez nem más, mint a „visszaper”. És ezt eddig én még sehol nem láttam hangsúlyosan leírva, vagy elsiklottam felette.
Ez az a jel: \
Ez az, ami az én billentyűzetemen a AltGr+Q kombinációra jelenik meg.

Teszek egy kísérletet arra, hogy én is elmagyarázzam:
Kezdjük azzal, hogy azok a parancsok, melyek az internetes leírásokban a legtöbbször megtalálhatóak, azok, melyeket mi itt távoli segítségnyújtásnál használunk, a parancs egyes részeit a SZÓKÖZ-zel választják el egymástól.
Példának egy analógia:
parancs forrás cél
Valami picit konkrétabb:
cp /home/csuhas/1.txt /home/csuhas/Letöltések
Megpróbálom neked részekre bontani:
A cp a copy, azaz másolás szóból jön, vagyis: Másold
a-home-per-csuhas-per-1.txt(fájlt)
a-home-per-csuhas-per-Letöltések(könyvtárba)
Látod? A szóköz választja el a parancs három részét egymástól.

Na most, mi történik, ha én az „1 napom.txt” nevű fájlt szeretném ugyaninnen, ugyanígy másolni?
Elsőre azt gondolnám, hogy ez lesz az:
cp /home/csuhas/1 napom.txt /home/csuhas/Letöltések
De hibára fut. Miért?
Kezdjük ezt is nézni az elejétől.
cp, azaz másold, eddig rendben.
a-per-home-per-csuhas-per-1(fájlt)... Hoppá! Nézd csak! Itt egy szóköz! Nagy valószínűséggel már itt elakad, mert nincs ilyen nevű fájlom..., de ha tovább is megy: A `napom.txt'-be? Hol? Itt? Mi van?! Ebből szinte borítékolhatóan hibaüzenet lesz, de, hogy nem az történik, amit szerettem volna, az biztos.
Mivel szóközökkel határól, a pluszban megjelenő szóköz(ök) összezavarják.

Itt jön be a „visszaper” jelentősége, mely arra szolgál, hogy figyelmeztesse a „parancssort”, hogy figyelj, itt most egy különleges karakter jön, nem egy határoló!
cp /home/csuhas/1\ napom.txt /home/csuhas/Letöltések
Mivel a fájlom neve „1 napom.txt”, ezért a parancssorba ezt úgy írom be, hogy
1
utána teszek egy \ jelet, ez mondja, hogy itt egy különleges karakter jön, valami, ami NEM neked szól, ami NEM határoló (vagy más az adott parancssoros alkalmazás által használt utasítást jelentő karakter)
és utána folytatom a fájl nevének gépelését: szóköz-napom.txt.
Ezáltal tudni fogja, hogy az „1” és a „napom” közötti szóköz nem határoló, az 1-szóköz-napom.txt összetartozik, a következő szóköz lesz a határoló (hacsak azelőtt is nem szerepel egy „\”, mert akkor az is ide tartozik és az azt követő szóköz lesz a határoló...).
Remélem valamennyire érthetően sikerült megfogalmazni és egy kicsit át tudtam neked adni ezt a dolgot, ha eddig te sem ismerted ezt!

Miután ezt megértettem már a Seddel sem volt olyan nehéz dolgom.
A Sed bizonyos részeket a / jellel határolja el egymástól.
Ami nekem kell cserélgetős parancs, annak a tanulópéldája a
sed 's/alma/körte/' alma.txt volt.
Ez az „alma” szavakat „körte” szavakra az alma.txt könyvtárban.
Nagyjából meg is értettem a tananyagot, de amikor a tesztre használt fstab nevű fájlomban a
# /dev/sde1
sort próbáltam kicserélni
/dev/sde1-re bizony először pórul jártam.
Ez nem is csoda, hiszen vannak benne per jelek és, ha nem jelzem, hogy ez(ek) különleges karakter(ek), akkor összezavarják az alkalmazást, hiszen az per jelekkel határol, sőt maga a # is egy különleges karakter...

A felhasználóm könyvtárában létrehoztam egy Practice nevű könyvtárat és abba bemásoltam a rendszerem /etc/fstab fájlját, hogy itt, biztonságos környezetben gyakoroljak.
A sed -i 's/\# \/dev\/sde1/ \/dev\/sde1/g' /home/csuhas/Practice/fstab paranccsal szépen kiszedtem a # jelet az amúgy 11. sorban lévő szöveg elejéről.
A sed -i 's/ \/dev\/sde1/\# \/dev\/sde1/g' /home/csuhas/Practice/fstab paranccsal meg odatettem (visszatettem).

Biztos lehet ezt másképp is, jobban is, de én ennek is nagyon örülök, hiszen ezt szerettem volna! Szuper! Szerintem, ha szükséges, ezt így már tudom majd használni arra, amire gondoltam.

csuhas32 a következőre módosította a címet: Sed, avagy visszaper és nem pöröl.

Ajánlom figyelmedbe a ^ és a $ jeleket és használatukat a sed, grep és az awk parancsokkal kapcsolatban. Nagyban megkönnyítik az ember életét! Ugyanakkor a fenti parancsokhoz tartozó paraméterek között használt $ nem ugyan azt jelenti, mintha ugyanezt a jelet bash-ban használnánk!😉
Ugyanakkor sedben a sorok is kiválóan megadhatóak a parancsnak bemenetként. Ám a sorok manipulált kiíratásában már a cut a nagymenő! 🙂
HA összetettebb dologra van szükséged, akkor az awk mágia lesz a te barátod! 😉

    Kittus2 Azért van egészséges lustaságom bőven! A szükségesnek véltnél nagyobb mélységben nem nagyon tanulok.
    Egy
    sudo apt update
    sudo apt upgrade
    párossal is tudok én lenni a helyi szuperhekker, csak figyelni kell, hogy amikor fut a kimenet a képernyőn, akkor ingassam a fejem, néha jelentőségteljesen hümmögjek, aztán, amikor lefutott, meredjek legalább tizenöt másodpercig a semmibe, és végül bizakodó tekintettel közöljem, nem lesz egyszerű, de megoldjuk!
    Ki kell még íratni az fstab tartalmát, azt is jól megnézni, elmélyedni a dmidecode kimenetében, keresgetni, olvasni mindenféle linuxos oldalakat a neten, visszaállítási pontot készíteni, aztán, amikor letelt a húsz perc, ki lehet adni a sudo apt install vlc parancsot. :-D
    Ha húsz másodperc alatt megcsinálom, akkor ezeknek eszükbe sem jut kifizetni a bambim.