sed에서 점 (.) 교체 를 제거하는

실제 질문은- M-BM-다른 캐릭터를 잃을 위험없이 특수 캐릭터 를 제거하는 방법을 아는 사람이 있습니까?

텍스트 문자열이 있습니다.

" . . ."

그건

space dot space dot space dot

텍스트 파일 에서이 문자열의 모든 발생을 바꾸려고합니다.

"..."

그건

dot dot dot

나는 sed와 관련이있었습니다.

sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots

불행히도 입력 파일을 조금이라도 변경하지는 않습니다. 파일 : https://www.dropbox.com/s/46zmiruy3ln85a1/sed-dots

텍스트 편집기에서 동일한 문자열을 바꾸려고 할 때 (geany를 사용합니다) 올바르게 찾아서 바꿉니다.

내가 생각할 수있는 유일한 이유는 그 공백 중 일부 (또는 전부)가 실제로 공백이 아니라 특별한 성격이기 때문입니다.

누구든지 해당 문자열을 찾아서 sed (또는 다른 명령 줄 도구)로 바꾸는 방법을 알고 있습니까? 문제가 생각보다 명확하지 않기 때문에 내 파일에서 아이디어를 테스트하십시오. 이것이 내가 그것에 대해 묻는 이유입니다.

cat -Amyfile을 사용한 후에 는 해당 공백이 공백이 아니라 M-BM-특수 문자 라는 문제가있는 것 같습니다 . .다른 문자가 제거 될 위험이 있으므로 검색에 제안 된 기호를 사용하는 것은 좋지 않습니다.



답변

먼저 실제 파일을 사용하는 것보다 테스트 echo하고 파이핑하는 것으로 시작 sed합니다. 둘째, {n}확장 정규식 모델에서를 사용하여 배수와 한계를 나타낼 수 있습니다.

당신은 거의 거기에 있었지만 정규 표현식은 앞선 공간을 기대했습니다.

$ echo 'cheese . . . muffins' | sed -r 's/(\s?\.){3}/ dot dot dot/g'
cheese dot dot dot muffins

(가) 주 \s?I 출력에 공간을 추가했습니다, 그래서 여전히 출력을 파괴하는 욕심이 충분하다. 당신은 그것을 원하지 않을 수 있습니다. 또한 공간을 선택적으로 만들었으므로 다음과 모두 일치합니다.

...
. ..
.. .
. . .
 . . .

옵션 ?플래그를 제거하십시오 .


주석에 유니 코드에 대한 문제가 주어지면 데이터를 ASCII와 동등한 것으로 강제 iconv한 다음 sed 할 수 있습니다.

$ iconv -f utf-8 -t ascii//translit sed-dots | sed -r 's/(\s?\.){3}/ dot dot dot/g'
Lorem ipsum dot dot dot
Some dot dot dot more text

답변

“.”를 “.”로 바꾸려면 다음을 시도하십시오.

sed -r 's/\. /\./g' -i sed-dots

이 아니라면 “. . .” “…”

sed -r 's/\. \. \./\.\.\./g' -i sed-dots

답변

파일을 실행할 때 파일을 사용할 수 있습니다.

tr '\240' ' ' < sed-dots.txt > sed-dots.new

이것은 변환 단계없이 작동했습니다.

sed 's/[[:blank:]]\.[[:blank:]]\.[[:blank:]]\./.../g' sed-dots.txt