abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 6
včera 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 1
včera 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
včera 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
včera 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 7
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 387 hlasů
 Komentářů: 31, poslední včera 19:19
Rozcestník
Reklama

Dotaz: Bash uprava textoveho suboru

27.3.2011 00:20 sirupko
Bash uprava textoveho suboru
Přečteno: 280×

Ahojte. Mám taký problém. Mám súbor ktorý obsahuje cesty k rôznym súborom. a mam nejaku premennu (p) v ktorej je časť nejakej cesty. A potrebujem vymazať iba tu časť čo je uložená v premennej. pr.: p="/var/spool/ subor a.txt obsahuje: /usr/share/locale/%l/%N /var/spool/mail/$USER /var/lock/subsys/c ako z toho dostanem zmeneny subor ktory bude obsahovať: /usr/share/locale/%l/%N mail/$USER /var/lock/subsys/c ďakujem za každú odpoveď


Řešení dotazu:


Odpovědi

Řešení 1× (sirupko (tazatel))
27.3.2011 00:54 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
sed -e "s#$p##" a.txt

Tedy výsledek na konzoli. Můžete přesměrovat do souboru (pokud má být výsledek uložen jinam) nebo sedy přidat sed -i -e "s#$p##" a.txt (pokud chcete editovat ten soubor).
27.3.2011 09:34 sirupko
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
ďakuej fungujeto presne ako potrebujem. V tých regulárnych výrazom mám poriadny chaos, vzdy som si myslel # sa používa na komentovanie....Neviete mi poradiť kde by som našiel nejaký prehlad tych regulárnych vyrazov a ich použitie?
27.3.2011 11:03 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru

Zdravim.

Moze tam byt cokolvek, znak # je v tomto pripade len na oddelenie jednotlivych casti. Moze to byt aj:

sed -e "s/$p//" a.txt
sed -e "s%$p%%" a.txt

atd.

 

Sed Introduction

27.3.2011 17:39 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
Máte pravdu, i když zrovna to v tomto případě / takto být nemůže protože byste se musel patlat s escapováním lomítek obsažených v cestě po expandování proměnné.

Osobně jsem uvykl většinově na #, protože tam mívám neméně kolizí s řetězci, se kterými manipuluji. A protože se mi tam zrovna lomítka vyskytují běžně, # vypadá hezky jinak, takže mi to přijde přehledné.
27.3.2011 12:50 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru

Zdravim.

 

Ale toto mu "vymaze" cokolvek, co obsahuje dany pattern.

Pokial ma ten subor daku formu (jedna cesta = jeden riadok), tak potom takto to maze len to co treba:

sed -e "s#^${p}/\{0,\}\$##g"

# - delimiter

^ - zaciatok riadku

$ - koniec riadku, v tomto pripade musi byt escapnuty pomocou \, lebo su pouzite dvojite uvodzovky, aby sme umoznili shellu vyhodnotit premennu p. Rovnako by sa pokusil bash (alebo iny aktualny shell) vyhodnit aj $ pre koniec riadku a je tu chyba. Preto to escapovanie.

\{0,\} - pocet vyskytov retazca, v tomto pripade 0 alebo viac. Cesta moze obsahovat asi neobmedzene pocet lomitok, ie. /var/spool je platny rovnako ako /var/spool///////////////////

 

Nemyslim si, ze je to idealne, lebo rovnako ako na konci, tak kdekolvek moze byt neobmedzeny? pocet lomitok. Nepredpokladam, ze niekto napise 100 lomitok na koniec cesty, ale jedno alebo ziadne je asi najcastejsia situacia. A samozrejme toto plati ak je v subore pre jeden riadok vzdy jedna cesta.

27.3.2011 14:04 sirupko
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
ďakujem už si pomaly začímam ujasnovať tie regurne vyrazy....a ešte by som sa chcel spytať ako by sa dalo spraviť keby som tu cesto v premennej p nechcel vymazať, ale farebne odlišiť?
27.3.2011 15:26 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru

Farebne odlisit to mozes, ak to podporuje tvoj terminal, ale do textoveho suboru to neulozis farebne odlisene. Textovy subor nie je napr. doc z wordu.

Mozes aj takto:

COLOUR='echo -e \e[0;31m&\e[m'; sed -e "s#^${p}/\{0,\}\$#$($COLOUR)#g" a.txt

COLOUR - premenna obsahujuca prikaz s danou farbou, 0;31 je ANSI kod pre cervenu

& - je pre sed, kde bude zavolany tento prikaz a bude obsahovat nalez vzhladom na regularny vyraz

Inak plati vsetko to, co predtym uz bolo popisane.

27.3.2011 17:55 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
Když už jsme u toho upřesňování. :) Ne, že by \{0,\} nefungovalo pro žádný nebo více výskytů, ale tradičně se v regulérním výrazu zapisuje (a mnohem častěji člověk potká) jako *. ;)
27.3.2011 18:30 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru

* je pre ziadny alebo viac vyskytov hocakeho znaku, mne slo o / (lomitko). Keby tam bola *, tak by to nebolo to, co chcem. Samozrejme, medzicasom, ste poznamenali, ze zadanie je odlisne, ako som to zobral ja. A v tom pripade je tam aj ta * zbytocna.

A netreba mi skutocne vykat. ;)

27.3.2011 18:59 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
* je pre ziadny alebo viac vyskytov hocakeho znaku, mne slo o / (lomitko). Keby tam bola *, tak by to nebolo to, co chcem. Samozrejme, medzicasom, ste poznamenali, ze zadanie je odlisne, ako som to zobral ja. A v tom pripade je tam aj ta * zbytocna.
A, tady bude jádro pudla. * i \{0,\} jsou opravdu totéž a váží se k libovolnému znaku nebo skupině, které bezprostředně následují.

Libovolný znak je ., zatímco .* je cokoliv v libovolném (i nulovém) množství a to se Vám zde zřejmě zamotalo. /\{0,\} a /* jsou synonyma. U*Xově pěkný příklad, dosažení stejného výsledku různými cestami.
A netreba mi skutocne vykat. ;)
Pokud Vám to vyloženě nevadí, tak bych se ho podržel.
27.3.2011 19:21 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru

Tak to je parada. Dakujem. Funguje to samozrejme, ako ste povedali.;)

27.3.2011 17:57 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
sed -e "s#^${p}/\{0,\}\$##g"
Ještě zde tedy poznámka. Vámi navržený regulérní výraz neodpovídá zadání. Schválně, jestli si toho všimnete. Z toho příkladu by to mohlo být zřejmé. I když v zásadě souhlas, psát co nejspecifičtěji, co chci, aby odpovídalo.
27.3.2011 18:25 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru

Asi to mam.;)

... mam nejaku premennu (p) v ktorej je časť nejakej cesty ...

Takze v tomto pripade vase zadanie je spravne samozrejme. Len mi to nejak automaticky prislo nie najvhodnejsie, aby sa mazalo takymto sposobom. Pri obycajnom texto je to v poriadku, ale pri niecom, co je textom len pre sed, ale pre mna ako uzivatela to ma aj svoj druhotny vyznam, tak je to ponekud nepohodlne a moze viest k problemom.

27.3.2011 18:56 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash uprava textoveho suboru
Jj. Dokonce to vypadá (podle toho příkladu), že je to jeden ze sloupců utopený někde seznamu cest na jednom řádku, takže nemohu kotvit začátek a konec. Nicméně, pokud by šlo předpokládat, že v parametru je celá část cesty, asi by bylo lepší něco jako (zdá se, že to nebere <TAB>, v [] jsou prostě znaky mezera, tabulátor a /, lze rozšířit, ale tohle pokryje obvyklé možnosti):

s#\([ /]*\)$p\([ /]*\)#\1\2#g

Co nejpřesnější popis je opravdu dobrý přístup, ale hrozí opačná chyba, výraz neodpovídá ani tomu, čemu by měl.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.