Jednym z najczęstszych literówek jest powtórzenie tego samego słowa dwa razy, jak tutaj. Potrzebuję automatycznej procedury, aby usunąć wszystkie powtarzające się słowa z pliku tekstowego. Nie powinno to być dziwną funkcją dla nowoczesnego edytora lub sprawdzania pisowni, na przykład pamiętam, że MS Word wprowadził tę funkcję kilka lat temu! Najwyraźniej domyślna funkcja sprawdzania pisowni w moim systemie operacyjnym (hun-spell) nie może tego zrobić, ponieważ znajduje tylko słowa, których nie ma w słowniku.
Byłoby OK mieć rozwiązanie poprawne dla konkretnego edytora edytora tekstowego dla systemu Linux (pluma / gedit2 lub Sublime-text) oraz rozwiązanie oparte na skrypcie bash.
linux
bash
regex
text-editing
spell-check
altroware
źródło
źródło
Odpowiedzi:
Z GNU grep:
Wynik:
Opcje :
-E
: Interpretuj(\b.+) \1\b
jako rozszerzone wyrażenie regularne.-o
: Wydrukuj tylko dopasowane (niepuste) części pasującej linii, przy czym każda taka część znajduje się w osobnej linii wyjściowej.Regex :
\b
: Jest granicą słów o zerowej szerokości..+
: Dopasowuje jeden lub więcej znaków.\1
: Nawiasy()
oznaczają grupę przechwytywania i\1
oznaczają użycie tutaj wartości z pierwszej grupy przechwytywania.Odniesienie: Często zadawane pytania dotyczące przepełnienia stosu
źródło
\b
po drugim ciągu, aby naprawić ten błąd podciągania.Perlish, pomyślałbym:
Pamiętaj jednak - wiele dopasowanych wzorów jest zorientowanych liniowo, więc musisz być ostrożny, jeśli przekroczysz granice linii. Jeśli możesz wykluczyć ten przypadek, masz łatwiejszą pracę, ponieważ możesz przeanalizować jedną linię na raz. Nie robię tego, więc skończysz wczytywanie całego pliku do pamięci.
źródło