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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam,
Mam skrypt który wrzuca mi ścieżkę z dodanych plików.
plik_poczatkowy="zawartosc_poczatkowa" plik_koncowy="zawartosc_koncowa" sciezka_do_katalogu="/root/katalog1/" plik_do_wysylki="nowe_pliki.txt" link_dla_danych="\\serwer_new" diff $plik_poczatkowy $plik_koncowy | grep ">" | sed -e "s/>/$link_dla_danych/g" -e 's/\//\\/g' > $plik_do_wysylki
kiedy go wykonuje to dostaje komunikat:
sed: -e wyrażenie #1, znak 19: nieprawidłowe odwołanie \1 po prawej stronie polecenia `s'
Jeśli do zmiennej link_dla_danych wrzucę:
link_dla_danych="\\\\serwer_new"
(dwa dodatkowe slashe)
to skrypt wykonuje się bez problemu.
wtedy do pliku nowe_pliki.txt dostaję nowy wpis:
\serwer_new \root\katalog1\plik32.txt
jak widać wrzucany jest z przodu tylko jeden slash a powinno być:
\\serwer_new \root\katalog1\plik32.txt
do tego myślę jeszcze aby usuwać wskazaną część ścieżki oraz tą spację po \\serwer_new
tak aby wynik był taki:
\\serwer_new\katalog1\plik32.txt
ma ktoś może pomysł jak to w jednym diffie załatwić?
pozdrawiam :)
Ostatnio edytowany przez debbie (2016-07-04 00:35:55)
Offline
Dosyć zagmatwany opis problemu.
Ogólnie w bashu znak \ jest traktowany jako specjalny, pozwalający "odczarować" kolejny znak tak, żeby ów nie był traktowany jako specjalny. Dotyczy to również jego samego. Polecam przeanalizować i wyciągnąć wnioski:
$ echo "$DISPLAY" :0.0 $ echo "\$DISPLAY" $DISPLAY $ var="\\1234"; echo "$var" \1234 $ var='\\1234'; echo "$var" \\1234
Offline
[url=lhttps://forum.dug.net.pl/viewtopic.php?id=28743]Było[/url]. Póki nie podzielisz się z nami kodem i nie opiszesz łopatą co Ty tak naprawdę chcesz osiągnąć to będziesz w kółko zakładać tematy o tym samym i grzęznąć w prostych problemach
MODEEEE
Offline
Ja podawałem rozwiązanie... Dlaczego nie działa? Co zwraca?
Skoro pipeline się nie sprawdza to może jednak trzeba pętlą przejechać plik różnic?
Sed'em każdą linie załatwić i poskładać zmiennymi "stringi".
Offline
[b]@debbie[/b]
Jeśli dobrze zrozumiałem to chcesz tego...
Prosze:
diff $plik_poczatkowy $plik_koncowy | grep ">" | sed -e "s/>/$link_dla_danych/g" -e 's/\//\\/g' | awk '$0="\\"$0' | tr -d ' ' > $plik_do_wysylki
Ostatnio edytowany przez SamozwańczyKrólBasha (2016-07-05 08:49:37)
Offline
diff $plik_poczatkowy $plik_koncowy | grep "> " | sed -e "s/> /$link_dla_danych/g" -e 's/\//\\/g' | awk '$0="\\"$0' > $plik_do_wysylki
Takie tam dopieszczanie ;)
Ten trim to tak chyba bardziej z przyzwyczajenia :)
Offline
Napisałeś:
do tego myślę jeszcze aby [b]usuwać[/b] wskazaną część ścieżki oraz[b] tą spację po \\serwer_new[/b][/quote]
Dlatego dałem tego "tr" :) Ale masz rację, maniakalnie tego używam :)
A teraz wzbudzę w was poczucie niższości. Zresztą uzasadnione :)
Offline
Wszystko jest niby OK...tylko kiedy w zmiennej
link_dla_danych="\\serwer_new"
po wykonaniu powyższego dostaje:
sed: -e wyrażenie #1, znak 20: nieprawidłowe odwołanie \1 po prawej stronie polecenia `s'
kiedy zaś mam dwa slashe więcej:
link_dla_danych="\\\\serwer_new"
wtedy wszystko jest okej.
moge zrobić jeszcze tak, że zmienną link_dla_danych ustawię bez slashy...
link_dla_danych="serwer_new"
tylko w wyniku ( w pliku txt wynikowym ) musze mieć np taki wpis:
\\serwer_new\root\katalog1\sjdadjasdas.txt
do tego chciałbym do dodatkowej zmiennej wrzucić
zmienna_do_wyciecia="\root"
tak aby wynikiem było:
\\serwer_new\katalog1\sjdadjasdas.txt
Ostatnio edytowany przez debbie (2016-07-05 14:17:04)
Offline
No dobra. To teraz tak na szybko, na siłe, brzydko i brudno. Wyłapiesz jednal na tej podstawie jak upiększyć swój kod
pan_zmienna=$(diff $plik_poczatkowy $plik_koncowy | grep ">" | sed -e "s/>/$link_dla_danych/g" -e 's/\//\\/g') echo $(echo $pan_zmienna | awk '{print $1}') $(echo ${pan_zmienna##*root}) | tr -d ' ' | awk '$0="\\"$0'
@debbie
Było by lepiej jakbyś pokazał cały kod :) To by nam ułatwiło zadanie
Ostatnio edytowany przez SamozwańczyKrólBasha (2016-07-06 09:19:17)
Offline
plik_poczatkowy="plik1.txt" plik_koncowy="plik2.txt" plik_do_wysylki="nowe_pliki.txt" do_wyciecia="> /root" do_wklejenia="\\\\serwer" diff $plik_poczatkowy $plik_koncowy | grep "> " | sed -e "s,$do_wyciecia,$do_wklejenia,g" | sed -e 's,\/,\\,g' | awk '$0="\\"$0' > $plik_do_wysylki
Nie róbmy naokoło....
Na biedę można byłoby jeszcze użyć cut z opcją c lub b, bo każda linia zaczyna się taka samą ilością znaków.
Offline
Dzięki bardzo...jednak odnosząc się do powyższego..
jesli zmienna jest:
do_wklejenia="\\\\serwer"
to jest okej...ale u mnei zmienna wygląda:
do_wklejenia="\\serwer"
i wtedy w wyniku ( otrzymuje z przodu tylko jeden slash z przodu np:
\serwer_new\katalog1\sjdadjasdas.txt
).
Offline
No to dlatego masz
| awk '$0="\\"$0'
. Dzięki temu dostaniesz dodatkowy \ na począdku wiersza.
Offline
Tyle że dostaje tylko jeden...a powinny byc dwa...
\\serwer_new\katalog1\sjdadjasdas.txt
Offline
spróbuj zamiast
do_wklejenia="\\serwer"
użyć
do_wklejenia='\\serwer'
Offline
GRA GITARA! :D Dzięki bardzo Seler :)))) o to mi chodziło :)
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00089 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.89.245' WHERE u.id=1 |
0.00067 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.144.89.245', 1733338608) |
0.00062 | SELECT * FROM punbb_online WHERE logged<1733338308 |
0.00049 | SELECT topic_id FROM punbb_posts WHERE id=303182 |
0.00055 | SELECT id FROM punbb_posts WHERE topic_id=28755 ORDER BY posted |
0.00103 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28755 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00123 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28755 ORDER BY p.id LIMIT 0,25 |
0.00093 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28755 |
Total query time: 0.00661 s |