Strona 1 z 1
Jak wyciąć blok tekstu - wyraŻenia regularne
: 29 listopada 2008, 00:05
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?
: 29 listopada 2008, 00:43
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
: 29 listopada 2008, 01:17
autor: snah
Polecam seda:
Prostszy przykład:
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ć '\'.
: 29 listopada 2008, 10:18
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:
żeby pousuwało puste znaki z początku linii. Coś ala
trim z php?
EDIT:
Rozwiązanie ;-)
Dla pustych znaków spacji:
Dla znaków tabulacji:
: 29 listopada 2008, 13:14
autor: snah
Inquistor pisze:EDIT:
Rozwiązanie ]sed -e 's/^[ ]*//g' plik.txt[/code]
Dla znaków tabulacji:
Mnie działa bez '[',']','g':
Wykorzystując zbiór znaków ([]):
[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.