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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 17:02 | Pozvánky

Přijďte si popovídat o open source obecně a openSUSE konkrétně s dalšími uživateli a vývojáři. Oslava nového vydání openSUSE Leap se uskuteční 16. prosince od 17:00 v nových prostorách firmy SUSE v Praze. K dispozici bude nějaké občerstvení a DVD pro ty, kdo je sbírají nebo ještě mají mechaniku. Po párty v kanceláři se bude pokračovat v některé z hospod v okolí.

Miška | Komentářů: 7
včera 14:55 | Zajímavý software

Byla vydána verze Alpha 1.0 otevřeného operačního systému pro chytré hodinky AsteroidOS. Podporovány jsou hodinky LG G Watch, LG G Watch Urbane, Asus ZenWatch 2 a Sony Smartwatch 3. Ukázka ovládání hodinek na YouTube. Jaroslav Řezník přednášel o AsteroidOS na chytrých hodinkách (videozáznam) na letošní konferenci OpenAlt.

Ladislav Hagara | Komentářů: 0
včera 13:30 | Zajímavý software

Byly uvolněny zdrojové kódy známé rogue-like hry DoomRL. Počátky hry jsou v roce 2002. Je napsána ve FreePascalu a zdrojový kód je nyní k dispozici na GitHubu pod licencí GNU GPL 2.0. Autor pracuje na nové hře Jupiter Hell, která je moderním nástupcem DoomRL a na jejíž vývoj shání peníze prostřednictvím Kickstarteru.

Blaazen | Komentářů: 0
včera 13:15 | Pozvánky

Přijďte s námi oslavit vydání Fedory 25. Na programu budou přednášky o novinkách, diskuse, neřízený networking atd. Release Party se bude konat 16. prosince v prostorách společnosti Etnetera. Na party budou volně k dispozici také propagační materiály, nová DVD s Fedorou 25 a samozřejmě občerstvení. Přednášky budou probíhat v češtině. Pro více informací se můžete podívat na web MojeFedora.cz. Jen připomínám, že tentokrát jsme zavedli

… více »
frantisekz | Komentářů: 0
9.12. 16:38 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 5. a 6. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu. Celkově bylo zpracováno 65 hodin z 89 přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
9.12. 11:30 | Komunita

Bylo oznámeno, že bude proveden bezpečnostní audit zdrojových kódů open source softwaru pro implementaci virtuálních privátních sítí OpenVPN. Audit provede Matthew D. Green (blog), uznávaný kryptolog a profesor na Univerzitě Johnse Hopkinse. Auditována bude verze 2.4 (aktuálně RC 1, stabilní verze je 2.3.14). Audit bude financován společností Private Internet Access [reddit].

Ladislav Hagara | Komentářů: 4
9.12. 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
9.12. 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 1
8.12. 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
8.12. 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 5
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 809 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Jak nahradit cut sedem?

pulpe avatar 5.3.2011 15:32 pulpe | skóre: 18
Jak nahradit cut sedem?
Přečteno: 433×

Zdravím všechny,

potřeboval bych pomoci, jak nahradit příkaz cut -c4- pomocí sedu. Našel jsem si toto

cut -c 10     =     sed 's/\(.\)\{10\}.*/\1/'


Díky za nápady.


Řešení dotazu:


Odpovědi

Řešení 1× (pulpe (tazatel))
Marián Kyral avatar 5.3.2011 18:57 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
$ echo 1234567890 |cut -c4-
4567890
$ echo 1234567890 |sed 's/\(.\{3\}\)\(.*\)/\2/'
4567890
Řetězec se rozdělí na dvě části:
\(.\{3\}\) - první tři znaky
\(.*\) - zbytek (od čtvrtého znaku až na konec)

A následně se celý řádek nahradí za obsah druhé části \2.
pulpe avatar 5.3.2011 19:40 pulpe | skóre: 18
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Děkuji moc.
Řešení 1× (pulpe (tazatel))
6.3.2011 00:29 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Nebo v případě právě toho příkladu ( -cX- ) by stačilo jen:
$ echo 1234567890 | sed "s/.\{3\}//"
4567890
(nebo samozřejmě pro -c4- sed "s/...//" :-D :-D).
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
6.3.2011 00:33 pc2005 | skóre: 32 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Hmmm asi jsem měl použít "pre" místo "code" :-/.
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
David Watzke avatar 6.3.2011 00:34 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Opraveno ;-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
7.3.2011 10:18 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?

Zdravim,

aky je zmysel tvojho pocinania, myslim vymeny cut za sed ? Cisto zo zaujimavosti sa pytam a z rovnakeho zakladu som odskusal cut, sed a bash v nasledujucom skripte:

 

#! /bin/bash

VAR='abcdefgh'

CUT_FUNCTION()
{
local INDEX
while [[ ${INDEX} -lt 1000 ]]
do
	echo "${VAR}" | cut -c4- > /dev/null
	let INDEX++
done
}

SED_FUNCTION()
{
local INDEX
while [[ ${INDEX} -lt 1000 ]]
do
	echo "${VAR}" | sed 's/.\{3\}//' > /dev/null
	let INDEX++
done
}

BASH_BUILTIN_FUNCTION()
{
local INDEX
while [[ ${INDEX} -lt 1000 ]]
do
	echo "${VAR:3}" > /dev/null
	let INDEX++
done
}

time CUT_FUNCTION
echo '-----------------------------------------'
time SED_FUNCTION
echo '-----------------------------------------'
time BASH_BUILTIN_FUNCTION
echo '-----------------------------------------'

A vystup skriptu je :

 

real    0m1.524s
user    0m0.824s
sys     0m0.764s
-----------------------------------------

real    0m1.630s
user    0m3.224s
sys     0m1.104s
-----------------------------------------

real    0m0.055s
user    0m0.056s
sys     0m0.000s
-----------------------------------------

Niekolkokrat som to spustil a vzdy bol sed najpomalsi. A pokial mozes pouzit bash, tak potom je zrejme, co je pouzit najvhodnejsie a najrychlejsie. Ale mozno mas specificku situaciu, kedy to musi byt sed.

Kazdopadne to ber len ako zaujimavost, ak vobec. Nemal som co na robote, tak to takto vyzera potom. :)

7.3.2011 12:36 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Ale no tak :) Vytvářet/spouštět 1000x proces cut/sed a říkat "jak je to pomalé" oproti jednou spuštěnému bash (ve kterém 1000x uděláte nějakou řetězovou operaci) je trochu nefér vůči cutu/sedu. Až zase budete mít volnou chvilku, chtělo by to zopáknout měření a tentorkát férově - třeba na 1000řádkovém souboru (cut ... soubor.txt, sed ... soubor.txt, while read; echo ...; done <souboru.txt).
7.3.2011 17:18 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?

Tak aby sme boli ferovy, tak som to zopakoval:

#! /bin/bash

SUBOR=subor.txt

CUT_FUNCTION()
{
cut -c4- "${SUBOR}" > /dev/null
}

SED_FUNCTION()
{
sed 's/.\{3\}//' "${SUBOR}" > /dev/null
}

BASH_BUILTIN_FUNCTION()
{
declare LINE
declare -i INDEX
while read LINE
do
	echo "${LINE:3}" > /dev/null
done < "${SUBOR}"
}

time CUT_FUNCTION
echo '-----------------------------------------'
time SED_FUNCTION
echo '-----------------------------------------'
time BASH_BUILTIN_FUNCTION
echo '-----------------------------------------'

a vysledok je, ze sed a cut je v rozmedzi 10 az 20x rychlejsi. Vid vysledok:

real    0m0.003s
user    0m0.004s
sys     0m0.004s
-----------------------------------------

real    0m0.005s
user    0m0.004s
sys     0m0.000s
-----------------------------------------

real    0m0.062s
user    0m0.044s
sys     0m0.008s
-----------------------------------------

Takze ano, mas pravdu a chapem, co vravis. Je pravda, ze som to podal dost jednostranne v predchadzajucom prispevku. Avsak je to vsetko o aktualnej situacii. Za predpokladu, ze nas nic nenuti pouzit vyhranenu mnozinu nastrojov, tak pokial by som cital textovy subor, tak pouzijem sed alebo cut. Ale pokial by na vstupe mali byt premenne, tak urcite bash a jeho schopnosti.

Myslim, ze tedka je to dostatocne ferove. :)

8.3.2011 18:06 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
... "podal dost jednostranne" hezky řečeno :D Jo teď je to lepší, teď už to nepřipomíná výsledky výběrového řízení na ministerstvu obrany. Už trochu OT, ale u souborů v UTF-8 se dají (některé) nástroje ještě výrazně zrychlit přes LANG=C program.... Příklad ze života:
bash$ head lags
0.00006891027516632080
-0.00000000850478210449
0.00002081826979675293
-0.00000000850478210449
0.00000087157315521240
0.00003280476159362793
0.00004395083016662598
0.00001094384869537353
0.00000000639637908936
0.00000092118244476318

bash$ wc -l lags
500000 lags

bash$ time grep "^-" lags >/dev/null

real    0m13.539s
user    0m13.426s
sys     0m0.017s

bash$ time LANG=C grep "^-" lags >/dev/null

real    0m0.010s
user    0m0.000s
sys     0m0.007s

neb čtení každého utf-8 znak má režii navíc.
8.3.2011 22:50 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?

Vdaka za tip s LANG=C .

9.3.2011 00:09 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Samozřejmě za předpokladu že nepotřebujete zpracovávat utf-8 znaky, např. je ten soubor v ascii.
10.3.2011 21:31 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?

Bolo pekne vidiet vysledky s LANG=C, ale u  mna je to zjavne ine:

pato@debian:~$ head -n10 log 
24321
28838
22269
15558
14989
9363
25462
1941
393
8833

pato@debian:~$ wc -l log 
1000000 log

pato@debian:~$ file --mime-encoding log 
log: us-ascii

pato@debian:~$ locale
LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=en_GB.utf8

pato@debian:~$ time grep '^0' log >/dev/null 

real    0m0.063s
user    0m0.048s
sys     0m0.020s

pato@debian:~$ time LANG=C grep '^0' log >/dev/null 

real    0m0.063s
user    0m0.044s
sys     0m0.024s

Mam za to, ze chyba je medzi stolickou a klavesnicou. System funguje s utf8 (vid LC_ALL=en_GB.utf8), subor je ascii (obsahuje nahodne cisla generovane bashom) a zlepsenie ziadne. Vedel by si mi povedat, kde robim chybu ?

p.s.: Som si stiahol aj zdrojove kody pre grep. Som to prehladal, ci nahodou sa nezmenila moda, ale stale je tam

setlocale(LC_ALL,"")

co je presne to, co som nasiel aj na http://www.cl.cam.ac.uk/~mgk25/unicode.html#activate . Som si len chcel overit, ze to tam nie je nejako napevno nastavene vychodzie kodovanie, ak sa ziadne nenajde nastavene. Ale o tom som presvedceny neni a vzhladom na nalez to zjavne funguje, ako je vysvetlene na odkazovanom zdroji.

10.3.2011 22:21 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Tak to máte nejspíš již patchnutou verzi grep, já mám 2.5.4, trápilo to dost lidí takže je dost pravděpodobné, že v 2.6 nebo 2.7 to je opravené. Problém byl konkrétně ve volání mbrtowc pro každý znak kopky sena, nebo snad ještě častější jak demonstruje následující:
bash$ wc lags
 100  100 1400 lags

bash$ time ltrace grep "^-" lags 2>&1 | LANG=C grep '^mbrtowc(' | wc -l
11633

real    0m2.217s
user    0m0.563s
sys     0m1.790s
Když si projedete začátek toho ltrace logu tak tam také uvidíte jak pracuje s locale.

(Jo, také jsem si kdysi říkal že nejlepší je si přečíst zdrojáky, ale už jsem v paranoidní fázi... a raději trasuji binárku :)).
pulpe avatar 7.3.2011 15:45 pulpe | skóre: 18
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Hledal jsem chybu proč WAIT_TIME=$(echo "$MSG1" | cut -c4-) nemá hodnotu 30.
Tak jsem zkoušel jestli to není náhodou chyba cutu, ale pak se ukázalo,
že to vrací 30 a to je problém ISO-8859-1 (něco z googlu)

Kompletní problém zde.
7.3.2011 17:51 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?

Vdaka, som si pozrel aj kompletny log z tej diskusie. Je mozne aj takto:

echo "${MSG1:3}"

teda pokial je ta hatlanina a cas ako vstupny retazec. Co som skusil, tak problem ma s tym retazcom iba cut. Nie ale sed alebo bash.

8.3.2011 20:25 l4m4
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
Proboha, BOM v UTF-8. (Ne, nemá to nic společného s ISO-8895-1 kromě toho, že takhle ta sekvence bajtů vypadá, když se intepretuje jako ISO-8895-1.)

Už nám tenhle mor zamořuje i Linux?
9.3.2011 08:14 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak nahradit cut sedem?
if ( SoftwareAddBOMAutomaticlyToUTF-8(software) ) //is it a stupid software?
{
  bool r = DestroyTheSoftwarePernamently (software); //Protect your PC
  SendMessageToTheWorld ("DestroyTheSoftwarePernamently", software); //Help protect others
  return r; //return true on protect your PC
}
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

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.