ďťż
 
 
   [+] BASH - sed, pozostawienie wyszukanego ciągu
 
 

Tematy

 
    
 

 

 

 

[+] BASH - sed, pozostawienie wyszukanego ciągu





kodama - 25-05-2010 22:28
Witam.
Czy da się zrobić takie coś, używając polecenia sed? Mam w pliku do wyszukania konkretną wartość (7 cyfrowy ciąg liczbowy) i usunąć z tego pliku wszystko poza nią?
Pozdrawiam

Edycja:
Dobrze, wygląda na to, że sobie chyba poradziłem z tym tematem.

sed -n -e 's/.*\(3.*\)/\1/p' plik.txt EDIT: No dobra, prawie sobie poradziłem, bo to działa wtedy, gdy po tych 7 liczbach (ta trójka jest tam na początku celowo - ciąg zaczyna się od cyfry 3) jest koniec linii. Jak zmusić go do tego, żeby odczytał tylko te 7 znaków i nic więcej?

Czasem zdarza się też, że w pliku zahaczy o jakąś kombinację np.: 3erfdsf5, którą też mi wyrzuci jako wynik działania - próbowałem wstawić: sed -n -e 's/.*\(3[;digit:]*\)/\1/p' plik.txt ale bez skutku. Wymyśliłem takie coś:
sed -n -e 's/.*\(3[0-9][0-9][0-9][0-9][0-9][0-9]\)/\1/p' plik.txt i z tego co widzę jest w porządku. Tylko pytanie - da się to jakoś ładnie skrócić? I nadal pozostaje kwestia tego, żeby odczytał tylko 7 znaków, nie więcej.



lessmian2 - 26-05-2010 09:02
Mógłbyś podać kawałek pliku na którym operujesz, było by łatwiej. Na szybko wyszło mi coś takiego:
sed -n -e 's/.*\([0-9]\{7\}\).*/\1/p' plik.txt Lub jeśli zawsze na początku liczby jest cyfra 3:
sed -n -e 's/.*\(3[0-9]\{6\}\).*/\1/p' plik.txt W perlu wygląda to zdecydowanie lepiej ;)
perl -pne 's/.*(\d{7}).*/\1/' plik.txt



kodama - 26-05-2010 11:11
O, to jest dobre i po próbach zanosi się na to jakby miało działać dobrze :) Dziękuję za pomoc kolego lessmian2. Ogólnie na początku miałem lekkie kłopoty ze zrozumieniem składni tego seda, ale widzę, że trzeba się mu przyjrzeć i zaprzyjaźnić z nim bliżej.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis