Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Komenda sed  (Przeczytany 4594 razy)

oshirley

  • Gość
Komenda sed
« dnia: 2012-12-04, 20:49:07 »
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

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Komenda sed
« Odpowiedź #1 dnia: 2012-12-04, 21:46:22 »
Tutaj popatrz.

A jak byś 7-letniej siostrze wytłumaczył, co to jest drugi wyraz w linijce?
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

alvaro

  • Gość
Komenda sed
« Odpowiedź #2 dnia: 2012-12-07, 06:35:37 »
Cytat: 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
Myślę, że coś w tym stylu:

#!/usr/bin/env bash

cat kot.txt | \\
  grep -E -i "^[[:space:]]*[^[:space:]]+[[:space:]]+[qwrtpsdfghjklzxcvbnmśłżźćń]" \\
  | sed -r -e "s/[euyioaęóąEUYIOAĘÓĄ]/_/g" > wyrazy.txt
wklejka1

Wygrepowujemy linie, w których drugi wyraz zaczyna się od spółgłoski (linia może się zaczynać od białych znaków, później ciąg niebiałych znaków - wyraz, później białe znaki, później spółgłoska) a potem sedem zamieniamy samogłoski na znaki podkreślenia.

Nie jestem pewny czy chodziło Ci o wyświetlenie/zapisanie całych linii, w których drugi wyraz zaczyna się spółgłoską czy samych tych drugich wyrazów.

Jeśli to drugie to coś w tym stylu:

#!/usr/bin/env bash

cat kot.txt | \\
  grep -E -i "^[[:space:]]*[^[:space:]]+[[:space:]]+[qwrtpsdfghjklzxcvbnmśłżźćń]" | \\
  sed -r -e "s/[euyioaęóąEUYIOAĘÓĄ]/_/g" | \\
  sed -r -e "s/^[[:space:]]*[^[:space:]]+[[:space:]]+([^[:space:]]+).*$/\\1/" > wyrazy.txt
wklejka2

Po prostu zostawiamy tylko te drugie wyrazy (wychwytujemy zwykłymi nawiasami okrągłymi i przepisujemy \\1).

Jeśli nie możesz używać grepa, tylko wyłącznie seda to można to zrobić tak:

#!/usr/bin/env bash

cat kot.txt | \\
  sed -r -e "s/^([[:space:]]*[^[:space:]]+[[:space:]]+[qwrtpsdfghjklzxcvbnmśłżźćńQWRTPSDFGHJKLZXCVBNMŚŁŻŹĆŃ].*$)?.*$/\\1/g" | sed /^[[:space:]]*$/d | \\
  sed -r -e "s/[euyioaęóąEUYIOAĘÓĄ]/_/g" | \\
  sed -r -e "s/^[[:space:]]*[^[:space:]]+[[:space:]]+([^[:space:]]+).*$/\\1/" > wyrazy.txt
wklejka3

Przepisujemy tylko to, co pasuje to wzorca (linie w których drugi wyraz zaczyna się spółgłoską) + usuwamy puste linie.
Potem tak jak w poprzednim skrypcie.

Pisałem to na szybko, bez zbytniego sprawdzania, więc nie gwarantuję poprawności, ale generalnie idea powinna być dobra.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Komenda sed
« Odpowiedź #3 dnia: 2012-12-07, 19:13:50 »
alvaro, nie odrabiamy tu zadań domowych!
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy