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?

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 }'`

http://img254.imageshack.us/img254/1225/gentoobar1rs9.png

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 }'

http://img254.imageshack.us/img254/1225/gentoobar1rs9.png

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?


http://img254.imageshack.us/img254/1225/gentoobar1rs9.png

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


http://img254.imageshack.us/img254/1225/gentoobar1rs9.png

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

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="(.+?)" />/;

http://img254.imageshack.us/img254/1225/gentoobar1rs9.png

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
To nie jest tylko forum, to nasza mała ojczyzna ;-)