Skocz do zawartości


Zdjęcie

Problem ze skryptem z wykorzystaniem Sed


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 goku94

goku94
  • Użytkownicy
  • 1 postów

Napisano 23 styczeń 2013 - 22:46

Problem jest następujący. Mam listę kilkunastu loginów użytkowników naszej instytutowaj sieci, są one postaci sxxxxxx, czyli s i sześć cyfr. Muszę zamienić te loginy na nazwiska osób do nich przypisanych. W tym celu zamierzam użyć komendy finger -s, która zwraca dwie linijki tekstu. Np.
finger -s s100000
zwraca
Login Name Blabla
s100000 Imię Nazwisko Dlasze info w kilku innych kolimnach.

Teraz z tego potrafię wyselekcjonować to nazwisko w taki sposób, że zostaje mi
<pusta linia>
Nazwisko

Teraz wykorzystuję Sed do zamiany każdego z loginów mojej listy na odpowiednie nazwisko. Lista znajduje się w pliku forsed, a nazwiska mają się znaleźć w sedout.
sed 's/^s[0-9][0-9][0-9][0-9][0-9][0-9]/finger -s s241609|cut -c'11-40'|cut -f1 -d' ' / ' forsed > sedout
W tym miejscu pojawia się następujący błąd:
sed: -e wyrażenie #1, znak 75: niezakończone polecenie `s'
Nie rozumiem. Nie korzystam z flagi -e, a polecenie s jest przecież zakończone. Zatem wszystko powinno iść sprawnie.

Poza tym, kiedy po komendzie finger i kilku innych dostaję:
<pusta linia>
Nazwisko

nie potrafię się tej pustej linii pozbyć, nawet przy użyciu Sed.

Pomocy. A za każdą z góry dziękuję.
  • 0


#2 mw_1975

mw_1975
  • Użytkownicy
  • 2535 postów

Napisano 23 styczeń 2013 - 23:49

1. Otwierasz otrzymany plik w jakimś edytorze tekstu
2. Kasujesz niepotrzebną linię
3. Zapisujesz plik i zamykasz program.
  • 0
AMD Phenom II 955
Pentagram Karakorum HP-120 AlCu + Arctic Cooling AF1225L
4 GB DDR3 1600 MHz
Było Asus Radeon HD 6950 DCU II, jest XFX 7850 z AC Mono - czego się nie robi dla tej ciszy!
SilentiumPC Deus G1 600W

#3 ~janusz

~janusz
  • Użytkownicy
  • 238 postów

Napisano 24 styczeń 2013 - 00:15

@up, nie jest to specjalnie noblogenne rozwiązanie jak ktoś ma napisać skrypt -.-

sed 's/^s[0-9][0-9][0-9][0-9][0-9][0-9]/finger -s s241609|cut -c'11-40'|cut -f1 -d' ' / ' forsed > sedout

Wydaje mi się, że twoje wyrażenie regularne nie jest zakończone apostrofem, stąd błąd z literką s. Poza tym masz tam /finger a wydaje mi się że chciałeś użyć pipe'a (| finger)

Co do problemu z linią spróbuj poleceniem tail. Więcej oczywiście w manualu.
  • 0


Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych