Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: SED - výpis stringu mezi prvním výskytem slova a následující mezerou  (Přečteno 1793 krát)

DuckD

  • Stálý člen
  • **
  • Příspěvků: 878
  • Open Srdcař
    • www.duckd.cz
Ahoj, prosím o pomoc s výpisem stringu mezi prvním výskytem slova a následující první mezerou, příklad:
Citace
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:
Citace
    chroust - je to živočich co chroustá
               - chroustá si, ale jednou dochroustá

Zkoušel jsem na to takto:
Kód: [Vybrat]
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!
8) Lidé žijí v souborech. ===>> LINUXTERO <<=== Pravidelná dávka tvého linuxtera!

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Kód: [Vybrat]
sed '/$start_mark/,/$end_mark/!d' /soubor
priklad:

Kód: [Vybrat]
# 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:

Kód: [Vybrat]
# 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
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

DuckD

  • Stálý člen
  • **
  • Příspěvků: 878
  • Open Srdcař
    • www.duckd.cz
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:
Kód: [Vybrat]
sed '/^$/q' # deletes everything after first blank line
Takže ve výsledku jsem to přečůral takto:
Kód: [Vybrat]
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
8) Lidé žijí v souborech. ===>> LINUXTERO <<=== Pravidelná dávka tvého linuxtera!

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Mě to teda funguje. Co dostaneš ty bez toho q?
Kód: [Vybrat]
cat text.txt | sed -n '/ chroust -/,/^$/p'

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
GNU sed by to měl zvládnout takto:

Kód: [Vybrat]
sed -n '/ chroust /,/^$/{/^$/d;p}'
Pokud se počítá jen s jedním výskytem:

Kód: [Vybrat]
sed -n '/ chroust /,/^$/{/^$/q;p}'
« Poslední změna: 18 Února 2013, 16:52:53 od GdH »

DuckD

  • Stálý člen
  • **
  • Příspěvků: 878
  • Open Srdcař
    • www.duckd.cz
To je přesně ono co potřebuju GdH, Dík!  :)
8) Lidé žijí v souborech. ===>> LINUXTERO <<=== Pravidelná dávka tvého linuxtera!

 

Provoz zaštiťuje spolek OpenAlt.