![마침표 이후 1개 이상의 공백에 대한 파일을 검색하여 2개의 공백으로 대체합니다. [닫기]](https://linux55.com/image/11718/%EB%A7%88%EC%B9%A8%ED%91%9C%20%EC%9D%B4%ED%9B%84%201%EA%B0%9C%20%EC%9D%B4%EC%83%81%EC%9D%98%20%EA%B3%B5%EB%B0%B1%EC%97%90%20%EB%8C%80%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EC%97%AC%202%EA%B0%9C%EC%9D%98%20%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C%20%EB%8C%80%EC%B2%B4%ED%95%A9%EB%8B%88%EB%8B%A4.%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
질문: 다음 문장이 시작되기 전에 모든 문장 끝 부분에 두 개의 공백이 필요한 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
모든 공백 문자 와 일치합니다( perl
ASCII 문자만 가능). 여기에는 MS-DOS 텍스트 파일의 줄 끝에 표시되지만 일반적으로 공백으로 사용되지 않는 CR 문자가 포함됩니다. 따라서 이러한 명령을 MS-DOS 형식의 파일에 적용하면 결국 MS-DOS 줄 구분 기호가 깨질 수 있습니다.
/ 대신 CR 없이 [[:space:]]
/를 사용할 수 있습니다(지원되지만 GNU는 아님).\s
[[:blank:]]
\h
\h
perl
sed
답변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