[BASH] Wyrazenie regularne i konstrukcja IF

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
InterNeo
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 12 maja 2008, 00:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

[BASH] Wyrazenie regularne i konstrukcja IF

Post autor: InterNeo »

Potrzebuje napisac IF'a a skrypice bash'a ktory bedzie mi sprawdzal czy zmienna $cel ma na koncu znak @. Jezeli takowy wystapi gdzies wczesniej ma nie brac tego pod uwage... Prawda - tylko dla @ na samym koncu. Jak takie cos napisac? // W sensie nie samo wyrazenie regularne prosze o pomoc przy napisaniu calego ifa.
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: хur »

w tak prostym przypadku nie lepiej było by po prostu sprawdzić czy ostatni znak to @ ?
InterNeo
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 12 maja 2008, 00:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: InterNeo »

O tym mówie, ale nie znam składni basha i nie wiem jak to zapisac.
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: хur »

Kod: Zaznacz cały

~$ cel=Berlin@

~$ if [[ ${cel:$((${#cel}-1))} = @ ]] ; then echo 'ognia!' ; else echo 'wtf?' ; fi

ognia!
 
~$ cel=Pacanów

~$ if [[ ${cel:$((${#cel}-1))} = @ ]] ; then echo 'ognia!' ; else echo 'wtf?' ; fi

wtf?

EDIT:
właśnie sprawdziłem $(()) można pominąć:

Kod: Zaznacz cały

if [[ ${cel:${#cel}-1} = @ ]] ; then echo 'ognia!' ; else echo 'wtf?' ; fi
InterNeo
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 12 maja 2008, 00:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: InterNeo »

No i dziekuje uprzejmie :]

Jeszcze gdybys powiedzial jak to sie czyta
${cel:$((${#cel}-1))} = @

ze wskazniem na dwukropek krzyzyk i co robia nawiasy okragle
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: хur »

$(( cośtam )) pozwala na użycie arytmetyki ale właśnie odkryłem że wewnątrz ${} nie jest koniecznie czyli można napisać:

Kod: Zaznacz cały

${cel:${#cel}-1} = @
, czyta się to tak:
${cel:liczba} traktuje cel jak napis i usuwa z rozwinięcia znaki o indeksie mniejszym niż 'liczba', znaki w napisie są indeksowane od 0. Jako 'liczba' podaję długość 'cel', czyli ${#cel} a ponieważ indeksowanie jest od 0 a ja chcę ostatni znak więc od długości odejmuję 1.
InterNeo
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 12 maja 2008, 00:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: InterNeo »

A gdybym chcial zrobic np. "Jesli nie zawiera @ to"
(Nie ze jako else... tylko jak takie wyrazenie zapisac)
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: хur »

nie zawiera w ogóle, czy na ostatnim miejscu ? w 2 przypadku możesz "zaprzeczyć" wyrażenie które już masz (wykrzyknikiem). Jeśli ma nie zawierać w ogóle to prościej będzie użyć wyrażenia regularnego (i też je zwykrzyknikować):

Kod: Zaznacz cały

[[ ! "$cel" =~ @ ]]
InterNeo
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 12 maja 2008, 00:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: InterNeo »

dzieki <sciana> wpisywalem ten wykrzyknik w kazde miejsce tylko nie w to...
artur404
Piegowaty Guziec
Piegowaty Guziec
Posty: 14
Rejestracja: 30 gru 2007, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: artur404 »

Chciałbym się podpiąć pod temat. Podejrzewam że Wam odpowiedź zajmie 5 min. a ja nie stety jestem zielony na razie w takie sprawy.

Mam plik .txt. a w nim zamiast polskich znaków, jakieś krzaki. Chciałbym napisać skrypt podmieniający je na polskie. Próbowałem w programach typu gedit, eclipse, ale tam nie umiem zrobić co następuje.

Mam słowo no, "a.ć". Chciałbym zrobić z niego "ałć". Więc potrzebuję wyrażenia
if [dowolna alfanumeryczna]\.[dowolna alfanumeryczna] REPLACE \. = ł.

ale wszystkie replace jakie mam to robią mi kasują [dowolna alfanumeryczna]\.[dowolna alfanumeryczna] w "ł" czyli z a.ć wychodzi po prostu ł.

jakiś pomysł albo sposób żeby draństwo zostawiało poprzedni i następny znak za podmieniany?
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: jacekalex »

Kod: Zaznacz cały

iconv --from-code=ISO-8859-1 --to-code=UTF-8 iso.txt > utf.txt
Możesz do skryptu wrzucić tą komendę - gdzie zamiast

Kod: Zaznacz cały

--from-code=ISO-8859-1
dasz zmiennną wygenerowaną programem enca -(jest w repo)
Przykład:

Kod: Zaznacz cały

:~/Pulpit/ftp$ enca -e plik.txt
UTF-8
Zresztą enca też ma możliwosć konwersji kodowania.

Kod: Zaznacz cały

man enca
Poskładanie tego w skrypt nie jest specjalnie trudne - poradzisz sobie. :)

Pozdrawiam
;)
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
artur404
Piegowaty Guziec
Piegowaty Guziec
Posty: 14
Rejestracja: 30 gru 2007, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME

Odp: [BASH] Wyrazenie regularne i konstrukcja IF

Post autor: artur404 »

Kodowanie pliku mam w UTF-8, jednak mimo to mam krzaki. Z tego co odkryłem, to w pdfie zastosowano czcionkę PHelvetica która stosowana jest na mac'ach a nie PC'tach. Stąd jakkolwiek bym nie konwertował, to zawsze znajdzie się jakiś krzak.

Teraz zastanawiam się nad importem fontów, ale to temat na inny dział ;)

Ale dzięki wielkie za polecony program. Całkiem mocarne cudo : )
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 15 gości