Jak wyci

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Inquistor
Beginner
Posty: 122
Rejestracja: 25 września 2007, 20:48

Jak wyciąć blok tekstu - wyraŻenia regularne

Post autor: Inquistor »

Generalnie za pomocą grep można w bardzo ładny sposób otrzymać linijki tekstu, ale jakiego narzędzia mam użyć kiedy chce wyciąć np taki blok tekstu:

Kod: Zaznacz cały

[tekst]
tekst tekst tekst
tekst tekst tekst
tekst tekst tekst
tekst tekst tekst
[/tekst]
Chciałbym jeszcze zaznaczyć, że ilość samego tekstu w środku jest różna. Chyba najlepszym rozwiązaniem by było żeby polecenie przechwytywało tekst, który się znajduje między znacznikami [tekst] [/tekst].

Jakieś sugestie?
dsue
Posty: 21
Rejestracja: 07 czerwca 2008, 18:17
Lokalizacja: Pabianice

Post autor: dsue »

Pewnie można dużo prościej, ale:

Kod: Zaznacz cały

cat plik.txt | awk 'BEGIN { FS="\[tekst]" } ; { print $1 }' | awk ' BEGIN { FS="\[/tekst]" } ; { print $1 }'
też działa (za wyjątkiem MacOSX - tam bash/awk ma swoje humory).

Pozdrawiam
snah
Beginner
Posty: 103
Rejestracja: 19 lutego 2008, 09:09

Post autor: snah »

Polecam seda:

Kod: Zaznacz cały

sed -n '/\[tekst]/,/\[\/tekst]/'p plik.txt
Prostszy przykład:

Kod: Zaznacz cały

sed -n '2,5'p plik.txt
Wypisze linie od 2 do 5. Za 2 wstawiamy wyrażenie regularne /poczatek/, za 5 /koniec/. Jako że '[' i '/' mają specjalne znaczenie, musimy je poprzedzić '\'.
Awatar użytkownika
Inquistor
Beginner
Posty: 122
Rejestracja: 25 września 2007, 20:48

Post autor: Inquistor »

Pierwsza metoda u mnie nie działa, natomiast ta z sedem jest dobra.

Dziękuję za pomoc :mrgreen:

EDIT:
Jeszcze jedna sprawa, sedem można spokojnie usuwać puste linie, ale jak usunąć puste znaki?
Np. jak mam:

Kod: Zaznacz cały

tekst]
dsasdsad
     sadsad
sadsa
[/tekst]
żeby pousuwało puste znaki z początku linii. Coś ala trim z php?

EDIT:
Rozwiązanie ;-)

Dla pustych znaków spacji:

Kod: Zaznacz cały

sed -e 's/^[ ]*//g' plik.txt
Dla znaków tabulacji:

Kod: Zaznacz cały

sed -e 's/^[\t]*//g' plik.txt
snah
Beginner
Posty: 103
Rejestracja: 19 lutego 2008, 09:09

Post autor: snah »

Inquistor pisze:EDIT:

Rozwiązanie ]sed -e 's/^[ ]*//g' plik.txt[/code]
Dla znaków tabulacji:

Kod: Zaznacz cały

sed -e 's/^[\t]*//g' plik.txt
Mnie działa bez '[',']','g':

Kod: Zaznacz cały

sed -e 's/^\t*//' -e 's/^ *//' plik.txt
Wykorzystując zbiór znaków ([]):

Kod: Zaznacz cały

sed -e 's/^[ \t]*//' plik.txt
[abc] oznacza dowolny znak ze zbioru znaków, czyli a albo b albo c. 'g' na końcu string replace to zamienienie każdego znalezionego wzorca w jednej linii - sed analizuje dane linia po linii.
ODPOWIEDZ