🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by PAweł Mon, 15 Jun 2009 13:25
W bashu mi nie idzie :( może w Perlu będzie prościej ...
#51445
Author: PAweł
Date: Mon, 15 Jun 2009 13:25
30 lines
1623 bytes
Witam,

Mam sobie taki skrypcik:

#!/bin/bash

   VAR=$((VAR+1))
   ((VAR++))

for nazwa in * ; do

exec find . -name "*.xml" -type f -print0 | xargs -0 sed -i -e
's/<NR>A200906156300000.</NR>/<NR>A200906156300000${VAR}</NR>/g';

done

Chce w kilkuset plikach XML, we wszystkich wystąpieniach taga "NR" zmienić
istniejącą zawartość na taką samą, tylko żeby ostatnia cyfra była
incrementowana o jeden w górę. Powiedzmy w jednym pliku xml
<NR>A2009061563000001</NR>, w kolejnym <NR>A2009061563000002</NR> itd. 
Niestety powyższe nie działa i zamiast incrementacji dokleja mi $VAR do
numeru. Ktoś ma może pomysł jak to zrobić? Może w Perlu będzie prościej?

dzięki wielkie z góry za pomoc

pozdr  


-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
#51446
Author: paweł
Date: Mon, 15 Jun 2009 13:28
10 lines
1175 bytes
NAwet w sumie zawartość taga <NR></NR> nie jest istotna.
Tam mogą wystąpić różne numery. Ważne żeby inkrementował ostatnią
cyfrę (wiadomo że zawartość może się składać  z 20 znaków, z czego
ostatnia to zawsze numer..

pozdr.

-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
#51447
Author: Stachu 'Dozzie' K.
Date: Mon, 15 Jun 2009 13:40
55 lines
2367 bytes
On 15.06.2009,  PAweł wrote:
> Witam,
>
> Mam sobie taki skrypcik:

OMG. Dawno nie widziałem tak spapranego.

> #!/bin/bash
>
>    VAR=$((VAR+1))
>    ((VAR++))
>
> for nazwa in * ; do
>
> exec[...]

A ten exec co według ciebie zrobi?[*]

> for nazwa in * ; do
>
> exec find . -name "*.xml"

Jaki to twoim zdaniem ma sens? "Dla każdej nazwy z bieżącego katalogu
znajdź w bieżącym katalogu"...

> xargs -0 sed -i -e
> 's/<NR>A200906156300000.</NR>/<NR>A200906156300000${VAR}</NR>/g';

A jakich ty się efektów spodziewasz po nieprzeczytaniu man bash, sekcji
QUOTING?

> Chce w kilkuset plikach XML, we wszystkich wystąpieniach taga "NR" zmienić
> istniejącą zawartość na taką samą, tylko żeby ostatnia cyfra była
> incrementowana o jeden w górę.

To jeszcze trochę ci brakuje w skrypcie. To się robi przez
find .. | while read filename; do ...; done.

> Powiedzmy w jednym pliku xml
><NR>A2009061563000001</NR>, w kolejnym <NR>A2009061563000002</NR> itd. 
> Niestety powyższe nie działa i zamiast incrementacji dokleja mi $VAR do
> numeru. Ktoś ma może pomysł jak to zrobić? Może w Perlu będzie prościej?

Parafrazując pewnego mądrego gościa, jeśli ktoś ma problem z napisaniem
skryptu zaraz krzyczy: "wiem! napiszę to w Perlu!". I teraz ma już dwa
problemy...



[*] Przypadkiem akurat zostanie uruchomiony w subshellu, więc nie
zaszkodzi. Ale tylko przypadkiem.


-- 
Stanislaw Klekot
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
#51448
Author: Szymon Sokół
Date: Mon, 15 Jun 2009 14:09
25 lines
2677 bytes
On Mon, 15 Jun 2009 13:25:59 +0000 (UTC),  PAweł wrote:

> Chce w kilkuset plikach XML, we wszystkich wystąpieniach taga "NR" zmienić
> istniejącą zawartość na taką samą, tylko żeby ostatnia cyfra była
> incrementowana o jeden w górę. Powiedzmy w jednym pliku xml
> <NR>A2009061563000001</NR>, w kolejnym <NR>A2009061563000002</NR> itd. 

Uwag Dozziego o jakości tego kodu nie będę powtarzał, natomiast chciałbym
zauważyć, że sam problem jest źle zdefiniowany. Co to znaczy "taką samą,
tylko żeby ostatnia cyfra była incrementowana o jeden w górę"? Nie czepiam
się tu słowa "incrementowaną" (choć po polsku raczej należy powiedzieć
"inkrementowaną" albo po prostu "zwiększaną", a skoro zwiększaną, to
wiadomo, że w górę, nie w dół...), tylko "taką samą, tylko żeby..." - tzn.
jeśli np. w pliku A jest A2009061563000001, to ma zrobić A2009061563000002,
a jeśli w pliku B jest A2009061563000029, to ma zrobić... co?
a) A2009061563000003, bo to następna liczba po A2009061563000002;
b) A2009061563000030, bo to następna liczba po A2009061563000029;
c) A2009061563000020, bo napisałeś, że zwiększana ma być *ostatnia* cyfra;
d) Masaj?

-- 
Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
Computer Center, AGH - University of Science and Technology, Cracow, Poland  O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
Free speech includes the right not to listen, if not interested -- Heinlein  H
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
#51449
Author: Pasman
Date: Thu, 25 Jun 2009 09:33
6 lines
1469 bytes
> Może w Perlu będzie prościej?
>

długosc skryptu w perlu bedzie zblizona

pasman
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads