Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Hrátky z řádky: tr, sed, awk a ti další

pht
pht (neregistrovaný)
19. 5. 2008 6:30 Nový

/etc/passwd

celé vlákno
K tomu zjistovani shellu bych snad doplnil z jineho soudku, ze je bezpecnejsi a univerzalnejsi pouzit "getent passwd" misto primeho cteni /etc/passwd.
disorder
disorder (neregistrovaný)
19. 5. 2008 9:38 Nový

Re: /etc/passwd

celé vlákno
a hlavne to funguje aj pri inych sposoboch autentizacie (ak su poriadne nastavene)
Petr Stehlík
Petr Stehlík (neregistrovaný)
19. 5. 2008 8:48 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Zrovna ten příklad na zpracování více souborů je velmi špatně (typická začátečnická chyba, taky jsem ji prvních 10 let dělal). Je vidět, že ho nikdo nezkusil doopravdy použít. Jednoduše si stačí zapamatovat, že od doby, kdy Microshit popularizuje mezery ve jménech souborů nelze "for i in *" používat.
Suchý čert
Suchý čert (neregistrovaný)
19. 5. 2008 9:10 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Ten první je dobře, ten druhý ne. „for i in *“ lze používat, jen je pak obvykle nutné výskyty $i uzavírat do uvozovek.
uživatel si přál zůstat v anonymitě
19. 5. 2008 20:48 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
to je samozrejme nesmysl. uvozovky ti v nicem nepomohou, protoze IFS ovlivnuje chovani foru, ne obsah iteratoru.
uživatel si přál zůstat v anonymitě
19. 5. 2008 20:50 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
tedy obsah iteratoru v konecnem dusledku vlastne taky :)
Suchý čert
Suchý čert (neregistrovaný)
19. 5. 2008 23:43 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
On se ale nejdříve dělá field splitting (podle IFS), a až pak pathname expansion. Kdyby se to dělalo opačně, tak by nefungovalo např. ani rm -rf *, apod.
Suchý čert
Suchý čert (neregistrovaný)
19. 5. 2008 23:46 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Tedy abych byl úplně korektní, tak rm -rf -- *. :-)
Ash
Ash (neregistrovaný)
22. 5. 2008 20:09 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
/to je samozrejme nesmysl. uvozovky ti v nicem nepomohou, protoze IFS ovlivnuje chovani foru, ne obsah iteratoru./

Potud teorie (navíc špatný). V praxi je for i in * zcela korektní a použitelný zápis, velmi vhodný obzvlášť pro soubory s mezerami v názvu. Narazíte až u \n... :)
Petr Macek aura:96
19. 5. 2008 9:28 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Samozrejme, ty uvozovky tam byt maji :-( Necham to opravit, diky za upozorneni
uživatel si přál zůstat v anonymitě
19. 5. 2008 10:52 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Jeste je tam v tech cyklech jedno typo, chybi tam strednik pred do.
Prosim bylo by mozne to take fixnout?
Diky Michal
Petr Macek aura:96
19. 5. 2008 11:21 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
v tomto pripade je strednik nutny:
for x in * ; do echo $x ; done


V pripade zapisu ve skriptu, dle meho nutny neni:
#!/bin/sh
for x in *
do
echo $x
done
Kit
Kit (neregistrovaný)
19. 5. 2008 13:40 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Zase ty chybějící uvozovky. Je to určeno pro začátečníky, tak si na ně zvykněte, ať na ně také nezapomínají.
#!/bin/sh
for x in *
   do
   echo "$x"
done
scarab
scarab (neregistrovaný)
20. 5. 2008 0:03 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
#!/bin/bash
for x in *; do
echo "${x}"
done

kdyz uz spravnej zapis tak totalne ne?
Ash
Ash (neregistrovaný)
22. 5. 2008 20:11 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Zbytečnost.
kkaarreell
kkaarreell (neregistrovaný)
19. 5. 2008 8:58 Nový

jde to s cut?

celé vlákno
Nedavno jsem potreboval z kazdeho radku ziskat poslednich deset znaku. Jak to udelat?
disorder
disorder (neregistrovaný)
19. 5. 2008 9:41 Nový

Re: jde to s cut?

celé vlákno
egrep '.{10}$' -o /etc/passwd
kkaarreell
kkaarreell (neregistrovaný)
19. 5. 2008 11:12 Nový

Re: jde to s cut?

celé vlákno
dik, ta voba -o se muze jeste nekdy hodit
mafo
mafo (neregistrovaný)
19. 5. 2008 9:04 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
a dneska na to pisu apoctak, tak si to jeste printnu:) skoda ze tady neni verze pro tisk
Kit
Kit (neregistrovaný)
19. 5. 2008 17:32 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Verze pro tisk tady je - stačí jen akuální stránku vytisknout. Ještě že máme CSS.
uživatel si přál zůstat v anonymitě
19. 5. 2008 20:54 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
to by me zajimalo, kde by ti toto mohlo stacit. na kucharine?
Milan Knížek
Milan Knížek (neregistrovaný)
19. 5. 2008 9:56 Nový

convert syntaxe ?

celé vlákno
Nevím, jakou verzi ImageMagicku používáte, ale "convert soubor.jpg -resize 800x600" nejspíše skončí chybou, neb chybí název výstupního souboru (uváděný jako poslední parametr).

Pakliže jste chtěl přepsat vstupní soubor, tak "mogrify -resize 800x600 soubor.jpg" by bylo lepší volbou.
pht
pht (neregistrovaný)
19. 5. 2008 9:59 Nový

Re: convert syntaxe ?

celé vlákno
A obvykle je vhodne pak provest jeste -unsharp.
Petr Krčmář aura:99
19. 5. 2008 10:02 Nový

Re: convert syntaxe ?

celé vlákno
Upraveno, díky.
JS
JS (neregistrovaný)
19. 5. 2008 11:05 Nový

par komentaru

celé vlákno
1. K tr - casto pouzivam:

tr -d "\r" soubor1 >soubor2

na konverzi textu z dosu do unixu (vim ze to umi specializovane utility, ale nikdy si nepamatuji, ktere).

2. Ke cut - casto pouzivam:

lynx -dump -links-only nejake.html | cut -c 7- | grep neco > seznam_odkazu
wget -c -i seznam_odkazu

na stazeni vseho co odkazuje z nejakeho html souboru (volby u lynx mohou byt spatne, nevim to ted z hlavy).

3. K find - lze take delat primo v radce:

for x in * ; do echo $x ; done

a podobne. Nejdriv tam obvykle pisu echo ten_prikaz, abych se presvedcil, ze to udela co ma. K tem mezeram bych podotkl, ze si lze nastavit separator (myslim promenna IFS) na "\n", a pak muzete fungovat i s mezerami (a pouzivat veci jako for x in `ls -1 adresar` ; do ... ).

Mozna neco co rikam vyse je trochu spatne, nevim z hlavy presne detaily (jsem ted ve Windows v praci).

Jeste me napadlo, nevim ted, jestli se to tu uz probiralo, ale takove ty zkratky
wget -nc http://cosi.kdesi/obrazek{0..9}{0..9}.jpg
jsou taky uzitecna vec.
aaa
aaa (neregistrovaný)
19. 5. 2008 11:24 Nový

*

celé vlákno
este by sa autor mohol odnaucit pouzivat "cat" vsade kde je uplne zbytocny, vid napr.

$ cat /etc/resolv.conf | tr "e" "o"
Petr Macek aura:96
19. 5. 2008 11:29 Nový

Re: *

celé vlákno
Prosim vysvetlete. V tomhle pripade mi cat prijde spravny
Petr Macek aura:96
19. 5. 2008 12:29 Nový

Re: *

celé vlákno
Ted mi to doslo, Vam jde asi o toto:
tr "e" "o" < /etc/resolv.conf

O vhodnosti nebo nevhodnosti pouziti cat se tu mluvilo nedavno v diskuzi. Spousta lidi to takhle pouziva, proto to i ja obcas uvedu a pouziju. Myslim, ze neuskodi ukazat i takovy zapis.
Semo
Semo (neregistrovaný)
19. 5. 2008 15:06 Nový

Re: *

celé vlákno
Predpokladam, ze mu ide o:

tr e o /etc/resolv.conf
uživatel si přál zůstat v anonymitě
19. 5. 2008 15:38 Nový

Re: *

celé vlákno
coz kazde tr rozhodne neumi: root@mail bin # uname -a FreeBSD mail.nekde.cz 6.2-RELEASE-p8 FreeBSD 6.2-RELEASE-p8 #0
man tr
...

SYNOPSIS
     tr [-Ccsu] string1 string2
     tr [-Ccu] -d string1
     tr [-Ccu] -s string1
     tr [-Ccu] -ds string1 string2

DESCRIPTION
     The tr utility copies the standard input to the standard output with sub-
     stitution or deletion of selected characters.
Palo
Palo (neregistrovaný)
19. 5. 2008 16:24 Nový

Re: *

celé vlákno
Tato debata ma zaujala. Ja radsej pouzivam presmerovanie ale chapem ze esteticky je cat mozno prehladnejsie. Preto som skusil najst dalsi dovod pretoze prehladnost nie je zanedbatelny faktor ani pri pisani skriptov.
Meranim som zistil ze presmerovanie je rychlejsie ako cat. Konkretne
time (tr a A < ii > ff)
dava lepsie vysledky ako
time (cat ii | tr a A > ff)

Moze to este niekto preverit, potvrdit alebo vyvratit?
disorder
disorder (neregistrovaný)
19. 5. 2008 17:41 Nový

Re: *

celé vlákno
/bin/cat -- to znamena samostatny proces
Petr
Petr (neregistrovaný)
19. 5. 2008 18:32 Nový

Re: *

celé vlákno
Premature optimization is the root of all evil. - DEK

Pokud by fakt slo o vykonnost, tak clovek predevsim nebude psat v shellu, ale v nejakem vhodnejsim jazyku.

Pokud mate neco jednoducheho, cat navic nevadi.
Pokud mate neco sloziteho, tak je nevhodne to v shellu psat.

Programator, ktery se zabyva mikrooptimalizacemi, plytva penezi zakaznika. :-)
disorder
disorder (neregistrovaný)
19. 5. 2008 18:41 Nový

Re: *

celé vlákno
preco to pises mne? ja cat pouzivam lebo je mi to prehladnejsie

BTW AFAIK Knuth nie je autorom, len to spopularizoval + urcite nehovoril o cat + co ta po peniazoch zakaznika?
phi
phi (neregistrovaný)
20. 5. 2008 19:26 Nový

Re: *

celé vlákno
jak kdy :) nekdy je to treba.
disorder
disorder (neregistrovaný)
19. 5. 2008 14:40 Nový

Re: *

celé vlákno
a preco sa nepodpises? ja tiez pouzivam casto cat a nevidim v tom ziaden problem, je to lepsie rozlozenie postupu a lahsie sa mi to cita
Ash
Ash (neregistrovaný)
19. 5. 2008 15:53 Nový

Bash

celé vlákno
mv "$f" "`echo $f | tr ' ' '_' `"

mv "$f" "${f// /_}"
sQuo
sQuo (neregistrovaný)
19. 5. 2008 20:42 Nový

nezvladne to iste aj perl/python ?

celé vlákno
ahoj,
je sice pravda, ze so sed-om ani awk-om velmi neprichadzam do styku(maximalne na takej urovni, ako bola tu zmienena), ale mam ten pocit, ze perl a python su jazyky minimalne rovnako dostupne a rozsirene, ako tieto nastroje a toto vsetko zvladnu lavou zadnou a mnoho navyse....
opravte ma, ak sa mylim, ale ja na taketo jednoduchsie upravy radsej predsa len pouzijem Perl...
EZV
EZV (neregistrovaný)
19. 5. 2008 22:44 Nový

Re: nezvladne to iste aj perl/python ?

celé vlákno
Ja bych vzdy pouzil primereny nastroj. Treba pri ulohach typu jednoducheho zpracovani textu je awk vyrazne rychlejsi nez perl - opravte mne, jestli se pletu.
uživatel si přál zůstat v anonymitě
19. 5. 2008 20:57 Nový

trapas

celé vlákno
ze to neni redakci trapne pravidelne vydavat clanek, ktery pak deset lidi opravuje, aby nebyl nesmyslny. o to vice, ze ty chyby neodhali korektori, ale az ctenari. no proste LOL.
Petr Macek aura:96
20. 5. 2008 7:35 Nový

Re: trapas

celé vlákno
mame tu jeden navic pouzity cat, o kterem se diskutuje a je dokonce casti uzivatelu schvalovan jako prehlednejsi.
Ano, u jednoho ze dvou cyklu jsem zapomnel uvozovky. Priklad by fungoval jen, v v pripade nazvu s mezerami by byl problem.

Nevim kolik korektoru clanek cte, ale je jiste, ze 5 lidi pri priprave clanku snadneji prehledne chybu nez nekolik tisic ctenaru.
Petr Macek aura:96
20. 5. 2008 7:43 Nový

Re: trapas

celé vlákno
Jeste drobnost - stale zde uvadime, ze hledame nove autory. Pridejte se a zkuste napsat nejaky dil. Jak vidite, tema je pomerne volne.
smal
smal (neregistrovaný)
20. 5. 2008 22:49 Nový

Re: trapas

celé vlákno
Trapna je hlavne tato pripominka.
Ja te fakt nechapu, podepsat se neumis, nejsi schopnej sam nic zplodit, ale drzkujes. Zkus si nekdy neco napsat tak, abys uspokojil vsechny...
kuda
kuda (neregistrovaný)
22. 5. 2008 14:34 Nový

Re: trapas

celé vlákno
lepe bych to nerekl :-/ ... neni mi moc jasny, z jakejch lidi se sklada unixova/linuxova komunita? dle meho by tydle lidi meli stat predevsim pri sobe, pomahat si a ne si lecit komplexy na uvozovkach ci pripadnejch chybach, ktery delame vsichni (sme jenom lidi, ci jak se to rika, ha?) nektery z tech drsnejch kritiku bych chtel potkat fakt osobne a udelat si obrazek, kdo za urcitejma pripominkama stoji .., i kdyz vlastne radsi ani nee :-/ ...
preju autorovi/autorum hodne trpelivosti a na lidi zakladajici podobny thready ("trapas"), hazejte s klidnym svedomim bobek! jo a diky za vse, c´ek se dycky necemu priuci, i kdyz na unixu uz par let jede!
Petr Macek aura:96
22. 5. 2008 16:17 Nový

Re: trapas

celé vlákno
Diky :-)
Jet
Jet (neregistrovaný)
30. 10. 2008 9:43 Nový

Re: trapas

celé vlákno
Rozhodne neni zbytecne vydavat takovehle clanky. Ja pracuju s Linuxem od verze kernelu 1.0.0, je to uz nejakych snad 15 let. Ale treba tu option -o v egrepu jsem neznal. Dokonce jsem neznal ani to, ze vic commandu v sedu se da oddelit strednikama, ja jsem to vzdycky pipoval do dalsiho sedu. Takze z vlastni zkusenosti mohu potvrdit, ze tato serie je vhodna i pro zkusene linuxare.
A to, ze se potom diskutuje o uvozovkach, to je take spravne, protoze se aspon upozorni na problem. Kdyby to bylo hned na zacatku spravne, spousta lidi by si ani nevsimla, ze tam uvozovky jsou a hlavne PROC.
EZV
EZV (neregistrovaný)
19. 5. 2008 22:31 Nový

Zbytecna pipe v prikladech

celé vlákno
Konstrukce typu

cat soubor | nejaky_program

mne vzdy privadeji k usmevu. Copak nestaci

<soubor nejaky_program

???
disorder
disorder (neregistrovaný)
19. 5. 2008 22:50 Nový

Re: Zbytecna pipe v prikladech

celé vlákno
aky by som bol stastny clovek, keby mi tak malo stacilo k usmevu... hm, mozno by sa mi aj it crowd pacil
EZV
EZV (neregistrovaný)
19. 5. 2008 23:02 Nový

Re: Zbytecna pipe v prikladech

celé vlákno
No a mam se snad kvuli tomu rozcilit? :-)
disorder
disorder (neregistrovaný)
19. 5. 2008 23:08 Nový

Re: Zbytecna pipe v prikladech

celé vlákno
nie, mam sa ja?
Ash
Ash (neregistrovaný)
22. 5. 2008 20:16 Nový

Re: Zbytecna pipe v prikladech

celé vlákno
Pro lidi jako vy by v příkladech měli psát zásadně jen něco jako

zcat soubor.gz | nejaky_program

:D
Donald Nice
19. 5. 2008 23:53 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
na vsechno ze zdejsiho prikladu jde pouzit sed.

echo "osklivy retezec s nekolika mezerama" | sed 's/\s/\n/2;s/\n.*//'
for x in $(echo $PATH | sed 's/\:/\n/g'); do du -h $x; done
/sbin/ifconfig | sed 's/^\s\+.*//;/\s/!d;s/\s\+.*//'
cat /proc/bus/input/devices | sed '/^[N|S]/!d'
EZV
EZV (neregistrovaný)
20. 5. 2008 0:23 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
c00l !!!
Ash
Ash (neregistrovaný)
22. 5. 2008 21:13 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Ono kolikrát je otázka jestli v bashi vůbec něco potřebujete (sed, awk...).

echo "osklivy retezec s nekolika mezerama" | while read x y z; do echo "$x $y"; done
echo "$PATH" | (IFS=":"; while read x; do du -h $x; done)
cat /proc/bus/input/devices | while read x; do [[ "$x" =~ ^[N|S].* ]] && echo "$x"; done
kkaarreell &nbsp;
20. 5. 2008 7:19 Nový

jeste dotaz k for x in *.jpg

celé vlákno
mam jeste jeden dotaz k tomu for cyklu.
Pokud jej zapisi jako "for x in *.jpg" a v adresari zadny jpg soubor neni, tak promenna x nabude hodnoty '*.jpg', coz dale ve skriptu skonci chybou. Da se tohle nejak elegantne vyresit? Ja zatim pouzival
"for x in `ls *.jpg 2> /dev/null`". Diky.
uživatel si přál zůstat v anonymitě
20. 5. 2008 9:11 Nový

Re: jeste dotaz k for x in *.jpg

celé vlákno
for x in *.jpg ; do
[ -r "$x" ] && continue;
echo "$x"
done;

;-)
Suchý čert
Suchý čert (neregistrovaný)
20. 5. 2008 10:42 Nový

Re: jeste dotaz k for x in *.jpg

celé vlákno
Nebo bashismus shopt -s nullglob. :-)
matej
matej (neregistrovaný)
23. 5. 2008 14:35 Nový

Re: jeste dotaz k for x in *.jpg

celé vlákno
find -name \*.jpg -exec echo "nasiel som {}" \;

alebo

find -name \*.jpg | while read f; do
echo "nasiel som $f"
done
astray
astray (neregistrovaný)
20. 5. 2008 20:59 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Smazání řádku 356 ze souboru known_hosts (funguje jen u novejšího sedu)
sed -i 356d /root/.ssh/known_hosts
Petr Macek aura:96
21. 5. 2008 8:40 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
dle nekterych reakci by se o sedu, grepu, ... dal napsat cely dalsi dil. Troufne si na to nekdo? :-)
Sancho
Sancho (neregistrovaný)
26. 5. 2008 2:07 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
Neviem, ci si niekto trufne, ale ja tento serial hltam, takze sa uz teraz neviem dockat.
Uz som ho pouzil asi 20 krat, odkedy som to zacal citat - fakt, ze viem, kde to najdem aj s pokecom a prikladom je na nezaplatenie.
A to s linuxom len zacinam a som skor desktopovy uzivatel...
haldyr
haldyr (neregistrovaný)
31. 5. 2008 12:29 Nový

RE: Hrátky z řádky: tr, sed, awk a ti další

celé vlákno
A nebo muzeme prejemenovat vsechny soubory a za mezeru strcit treba pomlcku:
rename 'y/ /-/' *

A pak for f in * pujde taky.
Zasílat nově přidané příspěvky e-mailem