Portál AbcLinuxu, 16. dubna 2024 17:55


Dotaz: testování textu na výskyt znaků

Conyx avatar 30.5.2005 11:57 Conyx | skóre: 5 | blog: c-blog
testování textu na výskyt znaků
Přečteno: 123×
Odpovědět | Admin
shanim příkaz, který by četl ze standartního vstupu, jako parametr by přijimal posloupnost znaků nebo regularni vyraz, a skončil s nulou pokud by výraz v textu našel a chybově pokud by výraz nenašel
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.5.2005 11:59 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
grep? :-)
30.5.2005 12:01 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Jo a ze standartního vstupu se čte dost blbě...
Conyx avatar 30.5.2005 13:33 Conyx | skóre: 5 | blog: c-blog
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
p5eklep :-D
Zafod avatar 30.5.2005 13:06 Zafod | skóre: 17 | blog: Zafodovo | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkuste to grepovat z /dev/tty
30.5.2005 13:11 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Terminál a standardní vstup jsou dvě různé věci (i když se občas shodují).
30.5.2005 13:21 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
$ echo "foo" | grep "foo" &> /dev/null; echo $?
0
$ echo "bar" | grep "foo" &> /dev/null; echo $?
1
Myslím, že to je přesně to, co hledáš, grep samozřejmě umí i regulární výrazy. Ale pokud chceš více možností, zkus použít Perl, nebo Python (pozor, odsazení je důležité)
#!/usr/bin/env python
import re
import sys

ret = 1
r = re.compile(sys.argv[1])
for line in sys.stdin:
  if r.match(line):
    ret = 0
    break

return ret
When your hammer is C++, everything begins to look like a thumb.
Conyx avatar 30.5.2005 13:46 Conyx | skóre: 5 | blog: c-blog
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
diky, takhle by to šlo
30.5.2005 13:29 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Než mě Pichi předběhne ;-)
#!/bin/bash

while read
do
    [[ "$REPLY" =~ "$1" ]] && exit
done
exit 1
30.5.2005 14:27 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Spuštění jednoho procesu grep -q bude zřejmě o hodně efektivnější, takže tohle patří do kategorie zbytečných reimplementací základních utilit v shellu ;-)
30.5.2005 14:49 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Moje zbytečná implementace bude na krátkých vstupech efektivnější než zbytečná implementace v pythonu ;-)
30.5.2005 15:20 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Ale co je na podobných threadech nejzábavnější, že si tazatel z nabízených řešení obvykle spolehlivě vybírá to nejpitomější...
30.5.2005 15:48 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Nechci se hádat, ale právě na krátkých vstupech je efektivita k ničemu, protože se tam prakticky nepozná.

Ad zbytečná implementace v Pythonu - je mi jasné, že Python jako náhrada grepu je kanón na vrabce, ale pokud potřebuje pokročilejší regulární výrazy (asi těžko, to by se neptal na grep :-)), případně s nalezeným textem dělat psí kusy, potom je Python vhodný.
When your hammer is C++, everything begins to look like a thumb.
30.5.2005 16:22 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
A o grep -P už jsi slyšel? Psí kusy jsou samozřejmě jiná kapitola, to obvykle používám Python taky.
30.5.2005 16:32 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Aha! Díky, to jsem skutečně neznal. Měl bych si raději, místo ábíčka, louskat manuály :-)
When your hammer is C++, everything begins to look like a thumb.
30.5.2005 15:11 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
To je teď nějakej sport se mnou soutěžit? :-D
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
30.5.2005 17:18 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Hele, co to máš za bash? Ten můj to neumí. Ten můj tam musí mít napsané == a nesmí tam mít uvozovky
$ [[ 'ahoj' == a* ]] && echo OK
OK
$ [[ 'ahoj' == "a*" ]] && echo OK || echo ':-('
:-(
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
30.5.2005 17:23 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
To je jedna z nových fíčurek v bash-3.0, zatím jsem pro ni nenašel uplatnění, tak aspoň takhle :o)
30.5.2005 17:26 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Citace z man page

An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly (as in regex(3)).
31.5.2005 10:00 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: testování textu na výskyt znaků
Už ani ten bash není co býval :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.