Portál AbcLinuxu, 2. května 2025 17:33
Diskuse byla administrátory uzamčena.
$ sed -n '1p' < ./soubor
První řádek
$ sed -n '$p' < ./soubor
Poslední řádek
$ sed -n '1!p' < ./soubor
Druhý řádek
Třetí řádek
Poslední řádek
Chce ještě někdo zodpovědět nějaký konkrétní příklad?
#!/bin/bash mv $1 $1.old sed 's/ahoj/nazdar/' $1.old > $1 #rm $1.old exit 0 $ find -type f | xargs -i ../skript.sh {}
$ cat soubor nazdarahojnazdarahojnazdarahojnazdar $ sed 's/ahoj/\n/g' < ./soubor nazdar nazdar nazdar nazdar $ sed 's/\(ahoj\)/\n\1\n/g' < ./soubor nazdar ahoj nazdar ahoj nazdar ahoj nazdar
$ cat soubor Řádek 1 Error 2 Řádek 3 Error 4 $ egrep -v '^Error.+$' < ./soubor Řádek 1 Řádek 3
Můžeš např. všechno kromě čísel a mezer smazat.
$ echo "1234 ahoj 4321" | sed -n 's/[^0-9 ]//gp' 1234 4321
Ale podle mě bude lepší zkontrolovat všechny argumenty a v případě, že uživatel v některém z nich zadá cokoliv jiného než číslo, zakřičí se na něj a program se ukončí.
for argument in $@; do if [ $(echo $argument | grep '[^0-9]' | wc -l) -ne 0 ]; then echo "Argument '$argument' není číslo!!!" exit 1 fi done
Rádi Ti pomůžeme, ale specifikuj prosím Tvůj problém jednoznačně, nejlepší bude když uvedeš konkrétní příklad, co máš a co z toho chceš dostat.
$ cat pocet_tagu.sh
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 file.xml"
exit
fi
echo -e "\n$1:"
tags_all=$(cat $1 |sed -n 's/[^>]*\(<[^ >]\+[ >]\)/\1\n/gp' |grep "^<[^\/]" |sort)
tags_uniq=$(echo $tags_all |sed 'y/ /\n/' |uniq)
for tag in $tags_uniq; do
count=$(echo $tags_all |sed 'y/ /\n/' |grep $tag |wc -l)
printf " %-20s %10i\n" $tag $count
done
$ find -type f -regex ".*\.xml" |xargs -i ./pocet_tagu.sh {}
./soubor02.xml:
<accelerator 2
<!DOCTYPE 1
<glade-interface> 1
<child> 236
<child 250
<packing> 206
<placeholder/> 2
<property 2521
<signal 36
<widget 258
<?xml 1
./soubor01.xml:
<kocka> 2
<pes> 2
<xml> 1
<zvire> 2
IFS="<"; set -- $(cat "$1"); for tag in "$@" ; do IFS=" >"; set -- $tag; echo "$1"; done | sort | uniq -c
IFS="<"; set -- $(cat "$1"); for tag in "$@" ; do echo "${tag%%[ >]*}"; done | sort | uniq -c
$ echo ~ /home/jozef $ echo a~ a~ $ echo a\ ~ a ~
$ ./configure --prefix=~/myprogs configure: error: expected an absolute directory name for --prefix: ~/myprogs $ ./configure --prefix=$HOME/myprogs checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ... atd. (takhle mi to už funguje) ...P.S. Takhle kompiluju software pokud nechci spouštět
make install
jako root. Prostě jsem si do .bash_profile
přidal příkaz který přidal ~/myprogs/bin
do PATH
a můžu takhle zkompilovaný a nainstalovaný programy normálně spouštět jako kdyby byli kompilované instalované "normálním způsobem". Zatím mi všechny takhle kompilované a instalované programy fungovali bez problémů (mezi nimi jsou i takové fajnové vychytávky jako třeba mplayer
). Dělám to tak, protože jsem poněkud paranoidní co se týče poskytování ROOT
oprávnění neznámým skriptům a programům (čti: normální sysadmin).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.