Tak więc aktualne pytanie brzmi - czy ktoś ma pomysł na usunięcie M-BM-
postaci specjalnej bez ryzyka utraty innych postaci?
Mam ciąg tekstu:
" . . ."
to jest
space dot space dot space dot
Próbuję zastąpić wszystkie wystąpienia tego ciągu w pliku tekstowym na
"..."
to jest
dot dot dot
Próbowałem zrobić z sed:
sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots
Niestety nie zmienia to nawet pliku wejściowego. Plik: https://www.dropbox.com/s/46zmiruy3ln85a1/sed-dots
Kiedy próbuję zamienić ten sam ciąg w edytorze tekstu (używam geany), zostaje on znaleziony i zastąpiony poprawnie.
Jedynym powodem, dla którego mogę wymyślić, jest to, że niektóre (lub wszystkie) z tych pól nie są tak naprawdę spacjami, ale jakąś specjalną postacią.
Czy ktoś ma pomysł, jak znaleźć i zamienić ten ciąg na sed (lub inne narzędzie wiersza poleceń)? Przetestuj swój pomysł na moim pliku, ponieważ problem nie jest tak oczywisty, jak mógłby się wydawać - dlatego o to zapytałem.
Po użyciu cat -A
mojego pliku wydaje się problem, że te spacje nie są spacjami, ale M-BM-
znakiem specjalnym. Używanie dowolnego symbolu .
sugerowanego do wyszukiwania nie jest dobrym pomysłem, ponieważ istnieje ryzyko, że niektóre inne znaki zostaną usunięte.
źródło
echo
zalecasz używanie zamiast catowania pliku, przynajmniej jeśli cat catuje plik, wiesz, że powłoka niczego nie interpretuje, ani echo.cat
- po prostused
załaduj plik (na przykład OP), ale nie zapisuj w wierszu (usuń-i
, abyś mógł zobaczyć i przetestować dane wyjściowe).cat -A sed-dots
, zobaczysz, że „spacje” między kropkami toM-BM-
znaki specjalne ... Nie wiesz, jak się tam wkradły, ale trzeba je wymienić. Jeśli nie możesz dobrze zaatakować ich, działa to:sed -r 's/(\s\..\..\.)/ dot dot dot/ig' sed-dots
Spróbuj wykonać następujące czynności, aby zamienić wszystkie „.” Na „.”
Ale dla ". . ." do "..."
źródło
Mógłbym użyć twojego pliku, kiedy go uruchomiłem:
Działa to bez kroku konwersji:
źródło