Analizuj według znaków kontrolnych

3

Próbuję przeanalizować dane wyjściowe polecenia, które oczekuje na zapis na ekranie. Ma dane oddzielone sekwencjami kontrolnymi przejścia do źródła (dla VT220, ESC[1;1H). Potrzebuję tylko ostatniej części (tj. Po ostatnim przejściu do źródła).

Próbowałem robić to na wiele sposobów (głównie awk i sed), ale problem zawsze polega na tym, że części sekwencji kontrolnej mają specjalne znaczenie (dla programu, a nie tylko dla powłoki) i nie mogę ich zacytować, gdy zastępuję wyjście tput .

Jakieś sugestie?

EDYTOWAĆ:

Oto przykład tego, co chcę przeanalizować ( ESCjest to znak ucieczki):

Page 1; line 1
Page 1; line 2
ESC[1;1HPage 2; line 1
Page 2; line 2
ESC[1;1HPage 3; line 1
Page 3; line 2

Chcę uzyskać następujące informacje, które byłyby na terminalu po uruchomieniu programu.

Page 3; line 1
Page 3; line 2

źródło
Czy możesz podać przykład tekstu, który próbujesz przeanalizować?
terdon
Tego rodzaju rzeczy najłatwiej byłoby zrobić w języku skryptowym.
dangph,
Zgadzam się. Moja trudność polega na wprowadzeniu sekwencji kontrolnej do skryptu bez skryptu, który próbowałby ją zinterpretować.
@bugmenot, na jakiej platformie jesteś? Mógłbym znokautować dla ciebie skrypt w Pythonie lub PowerShell w ciągu dwóch minut.
dangph,
1
Której części nie rozumiesz? Mam nadzieję, że to wyjaśni: staram się uzyskać ostatnią „stronę” danych, gdzie strona jest ostatnią częścią po sekwencji kontrolnej. Nie mogę jednak na stałe zakodować sekwencji kontrolnej, ponieważ może ona różnić się w zależności od terminala, na którym jest uruchomiona. Muszę pobrać go z tput, ale kiedy wykonuję zamianę poleceń, znak zmiany znaczenia nie jest poprawnie cytowany.

Odpowiedzi:

0

najłatwiejszy sposób poradzenia sobie z problemem:

  1. konwertujesz wszystkie sekwencje kontrolne przez 'uuencode -mv' lub 'xxd'
  2. teraz możesz przetwarzać tekst jak zwykle przez awk
  3. po wszystkim cofasz konwersję za pomocą „uudecode -o -” lub „xxd -revert”

Alternatywnie użyj: bbe - podobny do sed edytor plików binarnych

jeśli potrzebujesz bardziej szczegółowej odpowiedzi, potrzebuję bardziej szczegółowej próbki programu

sparkie
źródło
tak, to proste, kiedy wiesz, gdzie go szukać :-) Dodałem kilka rzeczy powyżej ...
sparkie