Zamiana kropki na dwukropek

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

A ten tekst to w jakim formacie jest zapisany?

najprostszym, tekstowym

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

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.

1 polubienie

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

1 polubienie

a w jaki edytorze to ma działać?

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.

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

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++

image

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.

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

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.

2 polubienia

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.

1 polubienie

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

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

Dziękuję bardzo.

1 polubienie

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

1 polubienie

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:])

1 polubienie

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

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.

1 polubienie