Komenda sed - wyświelenie linii

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
oshirley
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 28 lis 2012, 16:06

Komenda sed - wyświelenie linii

Post autor: oshirley »

Hej, mam mały problem, przypominam sobie komendy na jutrzejsze kolokwium i na'trafiłam na takie zadanie:
Korzystając z programu sed wyświetlić z pliku kot.txt linie, których drugi wyraz zaczyna się spółgloską. Wyrazy te zapisać w pliki wyrazy.txt, zastępując w nich samogloski znakiem podkreślenia


wiem, że będzie mi potrzebna komenda sed -n '/^[b,c,d,f,g,h,j,k,l,m,n,p,r,s,t,w,z]/p' kot ale wciąż nie wiem jak zaznaczyć, że chodzi mi o drugi wyraz
Ostatnio zmieniony 04 gru 2012, 20:15 przez oshirley, łącznie zmieniany 1 raz.
bear7
Przyjaciel
Przyjaciel
Posty: 6686
Rejestracja: 20 sty 2009, 23:12
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: pwd

Re: Komenda sed

Post autor: bear7 »

Zmień tytuł tematu tak, aby w sposób możliwie precyzyjny przedstawiał sedno sprawy, w której piszesz. Miej na uwadze również zgodność z REGULAMINEM
Tytuł tematu zmienisz edytując pierwszy post
W razie wątpliwości/zastrzeżeń odnośnie powyższej informacji skontaktuj się z moderatorem, który ją wstawił.
O pomoc pytaj a forum, a nie przez PW.
Mały 1
Zakręcona Traszka
Zakręcona Traszka
Posty: 548
Rejestracja: 24 sty 2008, 15:55
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: LXDE
Architektura: x86_64

Re: Komenda sed - wyświelenie linii

Post autor: Mały 1 »

Może być w awk?
Zawartość pliku:

Kod: Zaznacz cały

jan ala mirek
tomek ela bob
zenek kamil irek
Wynik:

Kod: Zaznacz cały

awk '$2~/^[b,c,d,f,g,h,j,k,l,m,n,p,r,s,t,w,z]/{gsub(/[a, e, y, u, i, o, ó ą, ę]/, "_", $2); print $2 > "wyrazy.txt"}' plik
k_m_l
EDIT:

To samo, ale krócej:

Kod: Zaznacz cały

awk '$2!~/^[aeyuioóąę]/{gsub(/[aeyuioóąę]/, "_", $2); print $2 > "wyrazy.txt"}' plik
Ostatnio zmieniony 05 gru 2012, 07:19 przez Mały 1, łącznie zmieniany 2 razy.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: Komenda sed - wyświelenie linii

Post autor: beluosus »

Kod: Zaznacz cały

sed -n 's/^[A-Za-z]\+\s\+[^aeiouyAEIOUY]\([A-Za-z]\+\)\s\+.\+$/_\1/p' kot.txt > wyrazy.txt
Małe wyjaśnienie:
początek lini - literki - spacje - nie samogłoska - literki - spacje - cokolwiek - koniec lini

Cała linia jest zamieniana na "_literki". Niepasujące linie są ignorowane (połączenie parametru -n z flagą /p). Może trochę na około i łopatologicznie, ale działa. :-)
oshirley
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 28 lis 2012, 16:06

Re: Komenda sed - wyświelenie linii

Post autor: oshirley »

dziękuję Wam! ;))
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: Komenda sed - wyświelenie linii

Post autor: beluosus »

Oj, nie doczytałem (x2). ;) Biorąc pod uwagę całą treść zadania:

Kod: Zaznacz cały

sed -n '/^[A-Za-z]\+\s\+[^aeiouyAEIOUY][A-Za-z]\+\s\+.\+$/p' kot.txt
sed -n 's/^[A-Za-z]\+\s\+\([^aeiouyAEIOUY][A-Za-z]\+\)\s\+.\+$/\1/w wyrazy.txt' kot.txt
sed -i 's/[aeiouyAEIOUY]/_/g' wyrazy.txt
Najpierw drukujemy całe linie pasujące do wzoru (/p), a do pliku zapisujemy (/w) tak jak wyżej napisałem - te podmienione. Na sam koniec podmieniamy samogłoski.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 12 gości