Portál AbcLinuxu, 15. května 2025 08:02

Dotaz: Shell a kontrola povolených znaků

10.2.2014 13:43 Jakub
Shell a kontrola povolených znaků
Přečteno: 200×
Odpovědět | Admin
Zdravim. poradite jak zkontrolovat $VAR jestli obsahuje pouze male znaky z abecedy bez diakritiky + pomlcku? Predem moc dekuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 10.2.2014 13:53 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
LANG=C grep -qE "^([a-z]|[A-Z]|-)*$"

(prasárna)
10.2.2014 14:06 Jakub
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Díky a lepší řešení? :-)
10.2.2014 17:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Bych to zkrátil:
LANG=C grep -qE "^[a-z-]*$"
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
martin-ux avatar 10.2.2014 15:24 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Napr. cez sed:

sed -n '/^[a-z-]*$/p'

A v shelly napr.:

$ VAR="ads-sa" ; if [ `echo $VAR | sed -n '/^[a-z-]*$/p'` ]; then echo "VAR OK"; fi
VAR OK

$ VAR="3adssa" ; if [ `echo $VAR | sed -n '/^[a-z-]*$/p'` ]; then echo "VAR OK"; fi
$
..when you do things right, people won't be sure you've done anything at all..
10.2.2014 17:17 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Odpovědět | | Sbalit | Link | Blokovat | Admin
V bashu bych klidně udělal toto:
if [[ ! "$VAR" =~ ^[a-z-]*$ ]]; then 
  echo "Obsahuje nepovolene znaky" 
fi
nicméně je pravda že to závisí na shopt -u nocasematch a někdy (nevím přesně kdy, ale s cygwin to u mě platí) to funguje správně jen s LC_COLLATE=C.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
10.2.2014 17:25 Sten
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
nocasematch se dá vyřešit jednoduše tak, že tam uvedete i upper-case znaky: ^[a-zA-Z-]*$.
10.2.2014 17:32 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Obráceně to má být :), píše se: „obsahuje pouze male znaky z abecedy bez diakritiky + pomlcku“,
kdyby tam nebyla podmínka bez diakritiky použije se ^[[:lower:]-]*$ a je pokoj…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
10.2.2014 17:37 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Shell a kontrola povolených znaků
Ale lze to vyřešit velmi „krásně“:
if [[ ! "$VAR" =~ ^[[:lower:]-]*$ || ! "$VAR" =~ ^[a-z-]*$ ]]; then 
  echo "Obsahuje nepovolene znaky"
fi
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

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.