Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: DuckD 18 Února 2013, 13:29:14
-
Ahoj, prosím o pomoc s výpisem stringu mezi prvním výskytem slova a následující první mezerou, příklad:
Jedna dva tři
Tady je text a je nějak dlouhý
chroust - je to živočich co chroustá
- chroustá si, ale jednou dochroustá
Tady je text už po mezeře... atd
Chtěl bych aby se vypsalo:
chroust - je to živočich co chroustá
- chroustá si, ale jednou dochroustá
Zkoušel jsem na to takto:
line=$(cat text.txt | sed -n '/ chroust -/,/^$/p')
echo $line
Ale nefunguje to.. Nevím si rady, prosím o pomoc. Nemusí to být zrovna v SEDu. Dík!
-
sed '/$start_mark/,/$end_mark/!d' /soubor
priklad:
# cat /etc/passwd;
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
avahi:x:103:104:User for Avahi:/var/run/avahi-daemon:/bin/false
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:Daemon:/sbin:/bin/bash
ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
games:x:12:100:Games account:/var/games:/bin/bash
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash
messagebus:x:100:101:User for D-Bus:/var/run/dbus:/bin/false
news:x:9:13:News system:/etc/news:/bin/bash
nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
ntp:x:74:105:NTP daemon:/var/lib/ntp:/bin/false
postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false
root:x:0:0:root:/root:/bin/bash
sshd:x:101:102:SSH daemon:/var/lib/sshd:/bin/false
statd:x:104:65534:NFS statd daemon:/var/lib/nfs:/sbin/nologin
usbmux:x:102:65534:usbmuxd daemon:/var/lib/usbmuxd:/sbin/nologin
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
dpecka:x:1000:100:dpecka:/home/dpecka:/bin/bash
radvd:x:105:2:Router ADVertisement Daemon for:/var/lib/empty:/bin/false
z etc/passwd vypisu jen uzivatele mezi mail a root:
# sed '/^mail/,/^root/!d' /etc/passwd
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash
messagebus:x:100:101:User for D-Bus:/var/run/dbus:/bin/false
news:x:9:13:News system:/etc/news:/bin/bash
nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
ntp:x:74:105:NTP daemon:/var/lib/ntp:/bin/false
postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false
root:x:0:0:root:/root:/bin/bash
-
Já ale potřebuju vypsat string mezi prvním výskytem slova a následujícím výskytem prázdné řádky. V SEDu mi prostě nefuguje nalezení prázdné řádky - ^$
Našel jsem toto:
sed '/^$/q' # deletes everything after first blank line
Takže ve výsledku jsem to přečůral takto:
cat text.txt | sed -n '/ chroust -/,/^$/p' | sed '/^$/q'
Myslím že to jde i jednodušeji, ale je to hodně složité...
Docela dobrá stránka zde:
http://www-rohan.sdsu.edu/doc/sed.html (http://www-rohan.sdsu.edu/doc/sed.html)
-
Mě to teda funguje. Co dostaneš ty bez toho q?
cat text.txt | sed -n '/ chroust -/,/^$/p'
-
GNU sed by to měl zvládnout takto:
sed -n '/ chroust /,/^$/{/^$/d;p}'
Pokud se počítá jen s jedním výskytem:
sed -n '/ chroust /,/^$/{/^$/q;p}'
-
To je přesně ono co potřebuju GdH, Dík! :)