Zamiana kropki na dwukropek


(sexy69bis) #1

Skąd to się tu wzięło?


(gom1) #2

A ten tekst to w jakim formacie jest zapisany?


(sexy69bis) #3

najprostszym, tekstowym


(gom1) #4

To w czym kłopot? Większość tekstowych edytorów udostępnia funkcję “znajdź i zamień”.


(sexy69bis) #5

Mam w b.dużym tekście błędnie napisane godziny.

11.30
9.35

Jak zamienić hurtowo kropkę na dwukropek?
nie zmieniając kropki w liczbach np 150.000 lub kropki na końcu zdania
też na dwukropek.

To tylko godziny są nieprawidłowo napisane.

RegExp w edytorach na to nie działa.


(AnonimowyUzytkownikDP) #6

:%s/[0-9].[0-9]/[0-9]:[0-9]/g


(sexy69bis) #7

a w jaki edytorze to ma działać?


(gunter) #8

To po co dałeś marker że rozwiązane, jak nawet nie wiesz jak masz to użyć. Pewnie miało działać w Vi lub Vim-e, ale to nie zadziała prawidłowo.

Tu masz do sed-a, zadziała też w Vi i Vim-e po wpisaniu tylko :%regex_z_przykładu. Zmieni wszędzie kropkę na dwukropek, tam gdzie będą co najmniej dwie cyfry przed kropką.

sed 's/\([0-9]\{2\}\)\.\([0-9]\)/\1:\2/g' plik.txt > wynikowy.txt

A to bez tego ograniczenia, dla co najmniej dwóch cyfr przed kropką.

sed 's/\([0-9]\)\.\([0-9]\)/\1:\2/g' plik.txt > wynikowy.txt

Możesz użyć przełącznika -i również, by zmian dokonać w originale, bez kopi nie używaj.


(AnonimowyUzytkownikDP) #9

chciałem wczoraj podać w sed, ale jak zobaczyłem składnie to chyba muszę do tego usiąść.


(sexy69bis) #10

Kliknąłem na “zaznacz jeśli ta odpowiedź rozwiązuje ten problem” przez pomyłkę
i nie wiem jak to wycofać.

sed ‘s/([0-9]{2}).([0-9])/\1:\2/g’ plik.txt > wynikowy.txt

Sed jest małym edytorem strumieniowym, który można znaleźć
we wszelkiej maści UNIX-ach (czyli także w Linuksie).

A czy w jakimś popularnym edytorze obsługującym Regexp w Windows można to zrobić?
np. Notepad++


(AnonimowyUzytkownikDP) #11

image


(gunter) #12

Tego to ja nie wiem, nie używam Windowsa. No właśnie, trzeba pisać na jaki system oczekuje się pomocy. Tak naprawdę to się domyślałem, napisałem by wyprostować składnie dla sed-a.

Linux to nie UNIX. Linux jest zgodny z POSIX, krótko pisząc ze standardami UNIX-a.

Przecież sed jest/był na Windowsa, z wyjątkiem najnowszego chyba, ale na którym za to jest przecież możliwość instalacji “podsystemu” Linux (zwał jak zwał, ale czy tam działa sed to nie wiem).

Sed jest na wszystkich livecd z Linuksem, nie lepiej uruchomić coś takiego i tam dokonać zmian.

Jeszce jedno co zauważyłem. To nie jest mój przykład, to jest nieprawidłowe.

To nie jest to samo co podałem, trzeba kopiować dokładnie.


(sexy69bis) #13

Czyli nie da się zwykłym edytorem dla Windows tego zrobić?
Może Word?


(krystian3w) #14

Znajdź: \b(\d{2})\.(\d{2})\b

Zamień: \1:\1

I w Notepad++ aktywować wyszukiwanie przy pomocy wyrażeń regularnych.

image

Ale nie wiem na ile uszkodzi plik i nie wyłapie sklejonych ciągów z tekstem np. 17.30Park.


(gunter) #15

Nie wiem, ale w writer-e z libreoffice można, to i może w Wordzie zadziała. Wygląda to tak w writer-e.

Ctrl-h (czyli Znajdź i zmień) rozwiń Inne opcje , zaznacz Wyrażenie regularne i wprowadź odpowiednio.
W znajdź: ([0-9]{2}).([0-9]{2})
Zamień: $1:$2
I jak tam wypada Zamień wszystkie, robić na kopii. Musiałem przez ciebie przeczytać manual do wyrażeń regularnych w Libreoffice.


(sexy69bis) #16

To jest to, działa super.
Troszkę to zmieniłem, i jest OK.

\b(\d?\d).(\d{2})\b
\1:\2

Dziękuję bardzo.


(sexy69bis) #17

W Word’zie Regexp nie bardzo chce prawidłowo wyszukiwać
i zaznacza również 20.00 w 120.000


(gunter) #18

Bo tam nie ma wprowadzonego ograniczenia, jest tylko minimum dwa znaki, przed i za kropką. Różnie można próbować, najlepiej chyba wychodzi ze spacją na końcu godziny, jeżeli ta spacja tam jest.

([0-9]{2}).([0-9]{2}[:space:])


(sexy69bis) #19

Regexp w Word nie szuka tego z
[:space:], \b, \s lub z normalną spacją


(gunter) #20

A nie wiem jak jest w Wordzie, tak jak pisałem ja podaje jak jest w Writerze. To też działa prawidłowo.

([0-9]{2}).([0-9]{2}\s)

Chociaż \s w manualu Libreoffice nie jest opisane, ale wystepuje w innych jako puste pole, spacja, tab i takie tam i działa w tym przypadku jak [:space:].

Z \b , też znajduje prawidłowo. Chyba najlepiej wyszukuje w Writerze, bo nie przeszkadza na końcu znak kropki, czy przecinka.

([0-9]{2}).([0-9]{2}\b)

\b - dopasuje granicę słowa.