Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2020-11-15 17:34:42

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Zamiana apostrofów

Witajcie. Mam sobie plik z userami. Ma on strukturę:

Kod:

user:hasło

Niestety czasami w haśle pojawiają się apostrofy '
Chcę je zamienić na \' bo muszę przygotować kwerendę SQL. Mam taki fragment kodu:

Kod:

    haslo=`echo $line | cut -f2 -d ":" | sed "s/'/\\\'/"`
    echo "UPDATE dbname SET pass = '$haslo' WHERE username = '$user';"

Niestety zamiast

Kod:

UPDATE dbname SET pass = 'h$asl\'0' WHERE username = 'potok';

mam 

Kod:

UPDATE dbname SET pass = 'h$asl'0' WHERE username = 'potok';

Co robię nie tak?

Offline

 

#2  2020-11-15 18:14:29

  noyo - Użytkownik

noyo
Użytkownik
Skąd: Mazury
Zarejestrowany: 2014-05-06
Serwis

Re: Zamiana apostrofów

U mnie na debianie działa to co napisałeś.

Może lepiej zmień:

Kod:

UPDATE dbname SET pass = 'h$asl'0' WHERE username = 'potok';

na

Kod:

UPDATE dbname SET pass = "h$asl'0" WHERE username = "potok";

Offline

 

#3  2020-11-15 19:39:46

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

To wtedy pozostaje problem, jak user używa " w haśle

Offline

 

#4  2020-11-15 20:43:45

  samu - Stały bywalec

samu
Stały bywalec
Skąd: ~/.linux/dug
Zarejestrowany: 2011-06-15

Re: Zamiana apostrofów

bakao napisał(-a):

Kod:

haslo=`echo $line | cut -f2 -d ":" | sed "s/'/\\\'/"`

Powinno zadziałać u Ciebie.

Kod:

haslo=`echo $line | cut -f2 -d ":" | sed "s/\x27/\\\'/"

https://i.postimg.cc/gjN4DvwW/IMG-20201115-204052.jpg


https://www.debian.org/logos/button-mini.png

Offline

 

#5  2020-11-16 08:33:17

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

Niestety nie zastępuje. Zarówno jak przekieruję potok do pliku jak i na stdout.

Offline

 

#6  2020-11-16 08:36:02

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

Jak dam samo

Kod:

echo "has'o" | sed "s/\x27/\\\'/"

to owszem, zwraca has\'o ale w skrypcie już nie

Offline

 

#7  2020-11-16 10:09:17

  samu - Stały bywalec

samu
Stały bywalec
Skąd: ~/.linux/dug
Zarejestrowany: 2011-06-15

Re: Zamiana apostrofów

Którego interpretera powłoki masz zdefiniowanego w skrypcie?

#!/bin/sh

czy

#!/usr/bin/env bash

/bin/sh

Kod:

sed "s/'/\\\'/"

/usr/bin/env bash

Kod:

sed "s/x27/\\\'/"

Ostatnio edytowany przez samu (2020-11-16 13:01:28)


https://www.debian.org/logos/button-mini.png

Offline

 

#8  2020-11-16 12:50:21

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

#!/bin/bash

Offline

 

#9  2020-11-16 15:49:49

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

ZAuważyłem, że nie ważne, czy użyję x27 czy ' to zawsze prawidłoo mi ten ciag znakow znajdje ale zastepuje na ' a nie \'

Offline

 

#10  2020-11-16 16:14:18

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Zamiana apostrofów

Kod:

echo -e "my'pas'\$sword"|sed "s/'/\\\'/g"

mi np to działa

Offline

 

#11  2020-11-16 17:08:04

  samu - Stały bywalec

samu
Stały bywalec
Skąd: ~/.linux/dug
Zarejestrowany: 2011-06-15

Re: Zamiana apostrofów

Gotowe ;)

Kod:

haslo=`echo $line | cut -f2 -d ":" | sed "s/'/\\\'/"`

Zamień na:

Kod:

haslo=$(echo "$line" | cut -f2 -d ":" | sed "s/'/\\\'/g")

alternatywy zapis wzorca dla seda

Kod:

haslo=$(echo "$line" | cut -f2 -d ":" | sed "s/\x27/\\\'/g")

Ostatnio edytowany przez samu (2020-11-19 11:24:56)


https://www.debian.org/logos/button-mini.png

Offline

 

#12  2020-11-17 14:21:46

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

Niestety i to nie podziałało. Ja nie wiem, co mam z tym bashem... Póki co zastosowaqłem obejście w postaci tr -d "'" ale jak ktoś chciałby się przyjrzeć temu blizej to mogę udostępnić skrypt i dane źródłowe

Offline

 

#13  2020-11-17 15:17:14

  samu - Stały bywalec

samu
Stały bywalec
Skąd: ~/.linux/dug
Zarejestrowany: 2011-06-15

Re: Zamiana apostrofów

U mnie na archu skrypt działa poprawnie z zapisem wyjścia komendy do zmiennej w sposób:

Kod:

zmienna=$(...)

Nie działa poprawnie z zapisem:

Kod:

zmienna=`...`

Możesz podrzucić skrypt do analizy problemu.

Edit post:

@bakao

Spróbuj z poniższymi zapisami. Może któryś u Ciebie zadziała.

Kod:

sed 's/'\''/\\&/g'
sed 's/\('"'"'\)/\\\1/g'
sed 's/'"'"'/\\&/g'
sed s/\'/\\\\\'/g
sed s/\'/"\\\'"/

Ostatnio edytowany przez samu (2020-11-19 12:34:52)


https://www.debian.org/logos/button-mini.png

Offline

 

#14  2020-11-21 18:38:55

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

Kod:

#!/bin/bash
while IFS= read -r line; do
    user=`echo $line | cut -f1 -d ":"`
    haslo=$(echo "$line" | cut -f2 -d ":" | sed "s/'/\\\'/g")
    echo "UPDATE IGNORE users SET pass = '$haslo' WHERE username = '$user';"
done < $1

Przykładowa zawartośc pliku:

Kod:

poltergeist:1^#CK:2f_c'MO<.p}hP"n\I4kt/_"p

Offline

 

#15  2020-11-22 12:54:29

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Zamiana apostrofów

przede wszystkim w haśle może być dwukropek, więc żeby nie rozcięło hasła powinno być:
cut -d ':' -f 2-

A z tą zmianą wszystko działa ok (dodałem spację do hasła):

Kod:

$ cat shadow
poltergeist:1^#CK:2f_c'MO <.p}hP"n\I4kt/_"p

Kod:

$ cat skrypt
#!/bin/bash
while IFS= read -r line; do
    user=`echo $line | cut -f1 -d ":"`
    haslo_before="$(echo "$line" | cut -f2- -d ":" )"
    haslo_after="$(echo "$haslo_before" | sed "s/'/\\\'/g")"
    for k in "$haslo_before" "$haslo_after"; do
        echo "UPDATE IGNORE users SET pass = '$k' WHERE username = '$user';"
    done
done < $1

Kod:

$ ./skrypt shadow 
UPDATE IGNORE users SET pass = '1^#CK:2f_c'MO <.p}hP"n\I4kt/_"p' WHERE username = 'poltergeist';
UPDATE IGNORE users SET pass = '1^#CK:2f_c\'MO <.p}hP"n\I4kt/_"p' WHERE username = 'poltergeist';

a to feler westchnął seler

Offline

 

#16  2020-11-27 16:31:43

  bakao - Zbanowany

bakao
Zbanowany
Zarejestrowany: 2020-11-15

Re: Zamiana apostrofów

Nareszcie zadziałało. Wielkie dzięki!

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)