Portál AbcLinuxu, 26. dubna 2024 12:45


Dotaz: Shell pattern grep

8.3.2005 23:47 Semo
Shell pattern grep
Přečteno: 160×
Odpovědět | Admin
Ako co najrychlejsie "pregrepovat" subor, ale nie podla regexpov, ale podla shell patternov?

Naprogramovat to viem, ale toto nebude prave rychle, napriek tomu, ze pouzivam iba vstavane prikazy, takze nove procesy sa vytvarat nemusia.
cat file |
while read line; do
   case "$line" in
      {pattern}) echo "$line";;
   esac
done
A v pripade, ze takyto sh.pat.grep existuje, ako mu zadat, ze nechcem podretazce, ale riadky, ktore splnaju dany pattern uplne ( analogia v regexpoch: {regexp} vs. ^{regexp}$ )
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.3.2005 23:54 Semo
Rozbalit Rozbalit vše Re: Shell pattern grep
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doplnim, aby ste ma nepresviedcali, ze za mam naucit regexpy a nevymyslat. Ja ich viem, ale nemozem to pozadovat po dalsich useroch, aby sa ich naucili na to, aby si mohli nakonfigurovat zalohovanie homu. Shell patterny im vysvetlim podstatne jednoduchsie. Najma, ked drviva vacsina vystaci s * a ?.
9.3.2005 00:16 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Shell pattern grep
A nebylo by lepší ty patterny spíš předávat findu? Pokud jsem to pochopil jako masky zálohovaných/ignorovaných souborů.

Jinak zkus [[ "$line" == *pattern* ]], třeba to bude rychlejší.

Anebo si ty patterny můžeš převést na regexpy ;-)
9.3.2005 00:27 Semo
Rozbalit Rozbalit vše Re: Shell pattern grep
Dik.

To s tym findom riesi moj problem, takze ostava uz iba obecne riesenie sh.pat.grepu ako domaca uloha.
9.3.2005 08:11 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Shell pattern grep
Dost dobře nechápu jak find tvůj problém řeší, protože asi fakt blbě hledám, ale find pracuje se jmény souborů, adresářů, obojím naráz, časy založení, modifikace, přístupu, právy, velikostí, typy (soubor/adresář/device/link/...), vlastníkem, skupinou, ale s obsahem nemůžu nic najít kromě empty. No nic. Mě přijdou ty shell wild cards tak stupidní, že jejich převod na regexpy zvládne i malé dítě, pokud teda náhodou nehodláš hledat věci typu ^ a podobně, to si zkrátka musíš oescapovat. No a úpravu na regext můžeš svěřit nějakému programu co to umí sám o sobě (za domácí úkol třeba perl), nebo to můžeš udělat v bashi.
shellgrep() {
  [ $# -lt 1 ] &&
      echo -e "Usage:\n\tshellgrep pattern [grep params ...]" &&
      return 0
  pattern="${1//\./\\.}"
  pattern="${pattern//\\?/.}"
  pattern="${pattern//\\*/.*}"
  shift
  grep "^$pattern$" "$@"
}
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é.
9.3.2005 13:18 Semo
Rozbalit Rozbalit vše Re: Shell pattern grep
Find mi postacuje, pretoze na zaklade patternov precitanych z userovho konfiguraku vyhladam subory, ktore mam pridat alebo odobrat z globalneho zoznamu suborov.

Prevod je stupidny, ale ak chcem osetrit vsetky spec znaky, tak sa to trocha natiahne. Ak ak by som chcel prevod uplny, tak zoznamy [a-z], prip {aaa,bbb,ccc}xxx znamenaju dalsie prikazy na prevod navyse.

Takto to za mna vyriesi find.
9.3.2005 00:38 Semo
Rozbalit Rozbalit vše Re: Shell pattern grep
Moja verzia (s case) vychadza asi o 2% rychlejsia (po asi 6 meranich kazdej verzie). Cez bash-test je zase prehladnejsi kod.
9.3.2005 14:10 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Shell pattern grep
Shell pattern grep tuning contest? ;-)

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.