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.