2011-05-18 12 views
5

Zdobądź te ciągi:Java regex i sed nie są takie same ...?

00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

Zastosuj ten exp w Java: ^(06700|067|00)([0-9]*).

Moim zamiarem jest usunięcie wiodącego "06700, 067 i 00" z początku ciągu.

To wszystko jest fajne w Javie, grupa 2 zawsze numer zamierzam, lecz w sed isnt samo:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

Co do cholery jestem brakuje?

Pozdrowienia,

f.

Odpowiedz

5

Przy korzystaniu z rozszerzonych wyrażeń regularnych, należy również pominąć \ przed ( i ). Działa to dla mnie:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 

Zauważ też, że nie ma potrzeby odrębnego wezwania do cat

3

wierzę, problem jest taki:

sed domyślnie BRE: Domyślnym zachowanie sed jest wspieranie podstawowych wyrażeń regularnych (BRE). Aby korzystać ze wszystkich funkcje opisane na tej stronie ustawić -r (Linux) lub flagi -E (BSD) do użycie Rozszerzony wyrażeń regularnych

Source

Bez tej flagi, przycisk | charakter interpretowany jest dosłownie. Wypróbuj ten przykład:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
Powiązane problemy