마침표 이후 1개 이상의 공백에 대한 파일을 검색하여 2개의 공백으로 대체합니다. [닫기]

마침표 이후 1개 이상의 공백에 대한 파일을 검색하여 2개의 공백으로 대체합니다. [닫기]

질문: 다음 문장이 시작되기 전에 모든 문장 끝 부분에 두 개의 공백이 필요한 userNotes.txt의 수정된 텍스트를 인쇄(화면에 표시)하려면 어떤 명령을 실행하시겠습니까?

이게 내 코드야

sed 's/.\s/.\s\s/' 

하지만 이렇게 하면 점과 공백 2개로 끝나는 줄도 점과 공백 3개로 변경됩니다.

답변1

sed 's/\.[[:space:]]\{1,\}/.  /g'

점( \.또는 와 일치 [.], .모든 문자와 일치해야 함), 하나 이상의 공백 문자( [[:space:]]및 와 일치하는 표준 문자 \s), .두 개의 공백으로 대체됩니다.

!다음을 수행 할 수도 있습니다 ?.

sed 's/\([.!?]\)[[:space:]]\{1,\}/\1  /g'

최신 버전의 GNU에서는 sed이를 다음과 같이 단축할 수 있습니다.

sed -E 's/([.!?])\s+/\1  /g'

또는 다음을 사용하여 perl:

perl -lne 's/[.!?]\K\s+/  /g'

[[:space:]]\s모든 공백 문자 와 일치합니다( perlASCII 문자만 가능). 여기에는 MS-DOS 텍스트 파일의 줄 끝에 표시되지만 일반적으로 공백으로 사용되지 않는 CR 문자가 포함됩니다. 따라서 이러한 명령을 MS-DOS 형식의 파일에 적용하면 결국 MS-DOS 줄 구분 기호가 깨질 수 있습니다.

/ 대신 CR 없이 [[:space:]]/를 사용할 수 있습니다(지원되지만 GNU는 아님).\s[[:blank:]]\h\hperlsed

답변2

텍스트가 "file"이라는 파일에 저장되어 있다고 가정하면 awk다음과 같이 사용할 수 있습니다.

cat file
this is OK: Turn the knob. Push the \u201con\u201d button. This is not: Turn the knob. Push the \u201con\u201d button.    

awk '$1=$1' OFS=" " file

또는 sed다음과 같습니다:

sed -E "s/[[:space:]]+/ /g" file

관련 정보