Nowe posty

Autor Wątek: txt edycja wiersza  (Przeczytany 4636 razy)

lwiaros

  • Gość
txt edycja wiersza
« dnia: 2014-01-14, 18:40:45 »
Załóżmy jest przykładowy wiersz np:

  do końca wiersza

darkdancer

  • Gość
txt edycja wiersza
« Odpowiedź #1 dnia: 2014-01-15, 13:33:05 »
Może coś jak:
sed -n 's/^.*\\(\\)/\\1/p'

lwiaros

  • Gość
txt edycja wiersza
« Odpowiedź #2 dnia: 2014-01-16, 13:23:32 »
darkdancer dzięki , ale ja wpadłem na iny pomysł i zrobiłem to w grep, ale dalej stoję w miejscu.
Mam plik tekstowy np link.txt w tym pliku  zapisane są linki (każdy w osobnym wierszu)Jak je wczytać  wszystkie po kolej otworzyć  np. przeglondraką Lynx
Napisałem taki skrypt

#!/bin/bash

ile=`grep -c 'http://' link.txt`; #zlicza ile jest wierszy
adres=`sed -n "$d"p link.txt`; #wyświetal dany link
d=1;
while [ $d -le $ile ]; do
lynx -source $adres >> www.txt
echo "wiersz $x $adres"
d=$[d + 1]
done
ale nie działa poprawianie zapisuje tylko strunę z pierwszego linku

darkdancer

  • Gość
txt edycja wiersza
« Odpowiedź #3 dnia: 2014-01-16, 15:14:19 »
Cytat: lwiaros
Mam plik tekstowy np link.txt w tym pliku  zapisane są linki (każdy w osobnym wierszu)Jak je wczytać  wszystkie po kolej otworzyć  np. przeglondraką Lynx
Dlaczego lynx a nie np. wget, który jest odpowiedniejszy do takich operacji? Ma opcję wczytywania adresów url z pliku i zapisywania pobranych elementów do wspólnego pliku. Czy z jakiegoś powodu musisz jeszcze renderować te strony?
Kod: bash [Zaznacz]

adres=`sed -n "$d"p link.txt`

Po tym poleceniu zmienna adres będzie zawierać listę linków z pliku link.txt, $adres wewnątrz pętli nie zmienia "zawartości" na kolejny link jakbyś chciał (polecenie nie jest ponownie interpretowane przez powłokę), lynx bierze tylko pierwszy element z tej listy i kończy swoje działanie dlatego dostajesz taki wynik a nie inny.

lwiaros

  • Gość
txt edycja wiersza
« Odpowiedź #4 dnia: 2014-01-16, 16:18:24 »
Cytuj
Dlaczego lynx a nie np. wget, który jest odpowiedniejszy do takich operacji? Ma opcję wczytywania adresów url z pliku i zapisywania pobranych elementów do wspólnego pliku. Czy z jakiegoś powodu musisz jeszcze renderować te strony?
renderować nie muszę ale, potrzebuje pobrać tylko czysty kod html tylko tych stron od linków , i wtedy pomyślałem jak strony www to przeglądarka a lynx ma opcje -source (zapisywania czystego kodu na wyjściu). No i zapomniałem o wget a wystarczyło
wget  -O www  -A html,htm -i link.txt
Tak dla przekory, wiedzy czy nie dało by się rady z tym Lynxem tego zrobić , jak nie z pętla while to może każdy link załadować do tablicy i wtedy jakoś je wczytywać

darkdancer

  • Gość
txt edycja wiersza
« Odpowiedź #5 dnia: 2014-01-17, 08:47:31 »
Cytat: lwiaros
Tak dla przekory, wiedzy czy nie dało by się rady z tym Lynxem tego zrobić , jak nie z pętla while to może każdy link załadować do tablicy i wtedy jakoś je wczytywać
Dało - jeśli każdy wiersz w pliku zawiera dokładnie jeden link to wystarczy:
Kod: bash [Zaznacz]
while read link; do
    lynx -source "$link" >> results.txt
done < links.txt

ale lynx generalnie służy do przeglądania stron pod konsolą bo potrafi renderować html do "ludzkiej" postaci.

lwiaros

  • Gość
txt edycja wiersza
« Odpowiedź #6 dnia: 2014-01-18, 10:45:19 »
Cytuj
while read link; do
    lynx -source "$link" >> results.txt
done < links.txt
całe rozwiązanie działa nawet szybciej jak wget
tylko  jednego  nie rozum dokładnie co ta linijka kodu znaczy
Cytuj
done < links.txt
miej  więcej done czyli koniec zapętlenia dostaje wejście z links.txt , to szczurzyc podawani nowego wiersza ?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
txt edycja wiersza
« Odpowiedź #7 dnia: 2014-01-18, 11:12:26 »
To nie jest przekierowanie do "done" tylko do całej struktury "while"
while ... done < links.txt

lwiaros

  • Gość
txt edycja wiersza
« Odpowiedź #8 dnia: 2014-01-23, 11:16:13 »
jak już jesteśmy przy wczytywaniu każdego z osobna wierszy z pliku przy pomocy pętli while to dlaczego np
#$link=#jakiś tam plik tekstowy
while read link; do
echo $link
  until [ "$r" = "10" ]; do
    r=$[r+2]
    echo $r
  done
done <  $link
da taki wynik
wiersz1
2
4
6
8
10
wiersz2
wiersz3
wiersz4
itd...
a nie taki
wiersz1
2
4
6
8
10
wiersz2
2
4
6
8
10
wiersz3
itd...

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
txt edycja wiersza
« Odpowiedź #9 dnia: 2014-01-23, 16:48:21 »
Nie zerujesz "r" na początku pętli. Po wczytaniu drugiego wiersza ma wartość 10 i nie wchodzi już więcej do until.