질문: 다음 문장이 시작되기 전에 모든 문장 끝 부분에 두 개의 공백이 필요한 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