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  2006-04-24 22:48:42

  T.N. - Użytkownik

T.N.
Użytkownik
Zarejestrowany: 2005-09-01

Prosty skrypt z wyszukiwaniem

Witam. Chciałbym napisać prosty skrypt w bashu, który z danego pliku tekstowego bedzie pobierał ciąg znaków znajdujący się między znakami " i ", a następnie uruchamiał inny program z tym ciągiem podanym jako argument. Mam problem z wyszukaniem tego wyrażenia. Próbowałem
x=`grep charakterystyczne_wyrazenie nazwa_pliku`
ale w takiej sytuacji otrzymuję cały wiersz, z którego teraz potrzebuję
"wykroić" interesujący mnie ciąg znaków. Czy można zrobić to w jakiś prosty sposób, najlepiej bez bawienia się w pętle i przepisywanie pojedynczych znaków? Otrzymany wiersz jest postaci:
aaaaa"szukane_wyrażenie"bbbbb, gdzie aaaaa i bbbbb są zawsze stałe, bez względu na plik, więc można byłoby po prostu odciąć określoną ilość znaków z lewej i z prawej. Będę wdzięczny za sugestie jak można to zrealizować.

Offline

 

#2  2006-04-25 14:13:59

  BiExi - matka przelozona

BiExi
matka przelozona
Skąd: Gorlice
Zarejestrowany: 2004-04-16
Serwis

Re: Prosty skrypt z wyszukiwaniem

pokaz przykladowy plik z tymi znakami i
czy w kazdym mierszu pliku jest taka sama ilosc znakow i?


[url=http://dug.net.pl][b]DUG[/b][/url]

Offline

 

#3  2006-04-25 14:31:37

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Prosty skrypt z wyszukiwaniem

Komendy masz miedzy:
aaa bbb

program odpalasz ./skrypt.sh plikzkomendami

Kod:

#!/bin/bash
`cat $1 | egrep 'aaa.*bbb' | awk '{  command=gensub("aaa(.+)bbb", "\1", 1, $0); print command }'`

[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

#4  2006-04-25 17:22:37

  T.N. - Użytkownik

T.N.
Użytkownik
Zarejestrowany: 2005-09-01

Re: Prosty skrypt z wyszukiwaniem

Przykładowy plik wygląda tak:

Kod:

<ASX Version="3.0">
<TITLE>06566980108070690</TITLE>
<Entry>
        <Ref href="mms://mms.content.loudeye.com/600111/p/065/66/98/0656698_0108_07_0690.wma" />
</Entry>
</ASX>

Chciałbym, żeby działanie skryptu polegało na uruchomieniu:
mplayer mms://...

Próbowałem zrobić tak jak pisze KARQL, ale wyświetla się:

Kod:

awk: 1: unexpected character '.'

Offline

 

#5  2006-04-25 18:38:18

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Prosty skrypt z wyszukiwaniem

Kod:

#!/bin/bash
cat $1 | egrep '<Ref href=".+" />' | awk '{  command=gensub("<Ref href="(.+)" />", "\1", 1, $0); print command }'

[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

#6  2006-04-25 21:28:29

  T.N. - Użytkownik

T.N.
Użytkownik
Zarejestrowany: 2005-09-01

Re: Prosty skrypt z wyszukiwaniem

Wyświetla mi:

Kod:

awk: line 2: function gensub never defined

Offline

 

#7  2006-04-25 22:17:07

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Prosty skrypt z wyszukiwaniem

u mnie dziala.
A moze to byc w perlu zamiast bashu?


[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

#8  2006-04-26 01:31:33

  T.N. - Użytkownik

T.N.
Użytkownik
Zarejestrowany: 2005-09-01

Re: Prosty skrypt z wyszukiwaniem

Może być w perlu. Zastanawiałem się czy może powinienem dociągnąć jeszcze jakieś pakiety, ale nic sensownego nie znalazłem.

Offline

 

#9  2006-04-26 15:42:16

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Prosty skrypt z wyszukiwaniem

Kod:

#!/usr/bin/perl
use warnings;
use strict;

while (<>) {
        `$1` if /<Ref href="(.+?)" />/;
}

Uruchamianie: perl skrypt.pl plikzkomendami


[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

#10  2006-04-28 16:47:56

  T.N. - Użytkownik

T.N.
Użytkownik
Zarejestrowany: 2005-09-01

Re: Prosty skrypt z wyszukiwaniem


Uruchamianie: perl skrypt.pl plikzkomendami
[/quote]

Dzięki, w zasadzie to działa, tylko ten skrypt próbuje uruchomić to wyrażenie, które odczytał... A ja bym chciał, żeby to wyrażenie było argumentem dla mplayera, czyli żeby wynikiem działania skryptu byłoby wywołanie:

Kod:

mplayer mms://mms.content.loudeye.com/600111/p/065/66/98/0656698_0108_07_0690.wma

Czy można odczytany ciąg zapisać do jakiejś zmiennej i z poziomu perla zrobić wywołanie: mplayer zmienna?

Offline

 

#11  2006-04-28 19:28:34

  KARQL - Członek DUG

KARQL
Członek DUG
Zarejestrowany: 2006-03-06

Re: Prosty skrypt z wyszukiwaniem

Tak wszystko sie da tylko trzeba ruszyc glowa.
Na poczatku chciales tylko sugestie.
Ja Ci nie bede wszystkiego na tacy wykladal i tak Ci dalem az za wiele.

Edit:

Kod:

`mplayer $1` if /<Ref href="(.+?)" />/;

[img]http://img254.imageshack.us/img254/1225/gentoobar1rs9.png[/img]

Offline

 

#12  2006-04-30 05:10:25

  T.N. - Użytkownik

T.N.
Użytkownik
Zarejestrowany: 2005-09-01

Re: Prosty skrypt z wyszukiwaniem

Denerwuje mnie takie podejście. Albo faktycznie chcesz pomóc, albo odpuszczasz zamiast zgrywać ważniaka. Dzięki Bogu, że programiści Linuksa nie stosują takiego podejścia... są błędy? No to co z tego, niech sobie użytkownicy sami poprawią i przekompilują, w końcu nie będziemy im dawać wszystkiego na tacy.

To co podałeś nie działa.  I z punktu widzenia osoby, która nie zna Perla jest kompletnie bezużyteczne. Zresztą już napisałem sobie programik w c++, więc EOT.

Gdyby kogoś interesowało (czyta wszystkie sample muzyczne .asf z amazon.com):

Kod:

# include <iostream>
# include <fstream>
# include <string>

using namespace std;

main(int argc, char *argv[])
{
  ifstream plik_we;
  plik_we.open(argv[1]);
  string temp;
  for(int i=0; i<5; i++)
    plik_we>>temp;
  string szukane_wyrazenie;
  plik_we>>szukane_wyrazenie;
  plik_we.close();
  //
  // kasuje pierwsze 6 znakow, zawsze takie same
  szukane_wyrazenie.replace(0,6,"");
  //
  // kasuje ostatni znak - zawsze "
  szukane_wyrazenie.replace(szukane_wyrazenie.length()-1,1,"");
  //
  //
  szukane_wyrazenie="mplayer " + szukane_wyrazenie;
  system(szukane_wyrazenie.c_str());
}

Offline

 

Stopka forum

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

[ Generated in 0.010 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00016 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00141 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.129.39.252' WHERE u.id=1
0.00084 UPDATE punbb_online SET logged=1716093037 WHERE ident='3.129.39.252'
0.00044 SELECT * FROM punbb_online WHERE logged<1716092737
0.00056 SELECT topic_id FROM punbb_posts WHERE id=27272
0.00189 SELECT id FROM punbb_posts WHERE topic_id=3402 ORDER BY posted
0.00095 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=3402 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00090 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=3402 ORDER BY p.id LIMIT 0,25
0.00086 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=3402
Total query time: 0.00811 s