|
[+] 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.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|