Jak udelat ...

Zdenek Pytela letty na mrakoplas.phil.muni.cz
Čtvrtek Duben 15 12:30:53 CEST 1999


On Thu, Apr 15, 1999 at 08:04:11AM +0000, Radek Hnilica wrote:
> cat file| sed -e "1,3d; $ d"| -e "$ d"| -e "$ d" >newr_file
> 
> Nevit nekdo jak se da odkazat na radky $-3 az $.
	Těžko. Ne, že by to v sedu nešlo spočítat :-), ale asi bude lepší
obětovat jeden příkaz navíc, něco jako
#!/bin/bash
POSL=$((`sed -n '$='` - 2))
sed "1,3d; $POSL,\$d"

Chcete-li se dozvědět něco o sedu, navštivte http://seders.icheme.org/.

	Jinak ale příspěvky do konference na toto téma vypadaly jako
příspěvky do soutěže o špatné a zbytečné příkazy. Člověk začínající
s Linuxem musí mít dočista zkažený dojem.

> cat file| sed -e "1,3d; $ d"| -e "$ d"| -e "$ d" >newr_file
Buďto sed -e "prikaz1;prikaz2"
 nebo sed -e "prikaz1" -e "prikaz2"
 nebo sed -e "prikaz1" | sed -e "prikaz2"
ale ne poloviční kombinace. Nejkratší zápis je ten první, a to je ještě -e
zbytečné.

> cat soubor | wc --lines
wc umí číst soubory samo: wc -l soubor

> echo `cat file|wc -l`   
zbytečné echo, ale to je aspoň (obvykle) vnitřní příkaz shellu

> #!/bin/sh
> LINES=`wc -l $1 | cut -b 1-10`
> cat $1 | head -`echo $LINES-3 | bc` | tail -n +4
cut je pro tento účel nevhodný, navíc dává špatný výsledek; awk je možná moc
velký, ale zato by fungoval; taky by se dala použít konstrukce ${PROM#...}
nebo ${PROM%...}
cat je zbytečný
místo echo výraz |bc se dá v bashi použít $((...))
Ale jako příklad kolony je to pěkné, ještě se mohla proměnná $LINES počítat
přímo v řádku ;-)

-- 

--Zdeněk Pytela, <letty na mrakoplas.phil.muni.cz>



Další informace o konferenci Linux