Portál AbcLinuxu, 10. května 2025 16:35

Dotaz: BASH - Odstranění znaků v řetězci

7.3.2013 14:13 kluk
BASH - Odstranění znaků v řetězci
Přečteno: 1206×
Odpovědět | Admin
Ahoj, nejsem programátor ale nutně potřebuji opravit jeden script, poradí prosím někdo?

Co potřebuji,
1 pokud je v proměnné AAA první znak "S" tak ho potřebuji smazat a nastavit proměnnou S="true"
2 pokud je v proměnné AAA poslední znak "E" tak ho potřebuji smazat  a nastavit proměnnou E="true"

if [ "???" = "S" ]; then
 S="true";
 delete znak S;
fi

if [ "???" = "E" ]; then
 E="true"
 delete znak E;
fi

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.3.2013 14:22 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
??? je "${proměnná:0:1}"

delete znak je proměnná="${proměnná:1}"
7.3.2013 14:25 kluk
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Díky a ten poslední "E" ? pokud možno bez cyklu :( Děkuji
7.3.2013 14:35 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
proměnná=${proměnná:0:${#proměnná}-1}

to odstraňování by možná bylo přehlednější pomocí expansních operátorů % a #, ale nezaškodí procvičit si občas klasickou práci s řetězci...
7.3.2013 14:50 kluk
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Díky moc, jak se dostanu k serveru tak to hned vyzkouším...
7.3.2013 15:39 kluk
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Tak vše funguje akorát nemám tu podmínku který zjistí existenci toho posledního znaku, můžu požádat ještě o ten zápis? Díky
7.3.2013 15:51 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
${proměnná:${#proměnná}-1}
7.3.2013 15:52 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
if [ "${AAA#${AAA%?}}" = "E" ]; then 
  E="true"; 
fi
Výše uvedené
if [ "${AAA:0:${#AAA}-1}" = "E" ]; then 
  E="true"; 
fi
není vhodné, může-li být AAA prázdný řetězec tedy AAA=''
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.3.2013 20:57 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Pravdu díš, nechal jsem se unést...
7.3.2013 16:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash

#1st input argument
AAA="$1"

S='false'
E='false'

if [ "${AAA:0:1}" = "S" ]; then
  S="true";
  AAA="${AAA:1}"
fi
if [ "${AAA#${AAA%?}}" = "E" ]; then
  E="true";
  AAA="${AAA%?}"
fi

echo "E = '$E'"
echo "S = '$S'"
echo "AAA = '$AAA'"

exit 0
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.3.2013 09:31 kei.101
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin

S= E=

TEST="${AAA#S}"
[ "$TEST" = "$AAA" ] || S="true"
AAA="$TEST"

TEST="${AAA%E}"
[ "$TEST" = "$AAA" ] || E="true"
AAA="$TEST"
8.3.2013 09:52 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH - Odstranění znaků v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
if [[ $AAA = S* ]]; then
  S=true
  AAA="${AAA#S}"
fi

if [[ $AAA = *E ]]; then
  E=true
  AAA="${AAA%E}"
fi
If you hold a Unix shell up to your ear, you can you hear the C.

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.