텍스트 파일이 있는데 각 단어(여러 문자)를 새 줄에 인쇄하고 싶습니다. 단어가 단일 문자로 구성된 경우 다음 단어의 일부로 처리되어 새 줄에 인쇄되어야 합니다. 두 단어 사이에 있으면 두 번째 단어 뒤에 와야 합니다. 예:
Unix & Linux Stack Exchange is a question and answer site for users of Linux,
산출
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux
답변1
어때요?
sed -r 's/([^ ]{2,}) /\1\n/g' file
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
공백 앞에 공백이 아닌 2개 이상의 문자 패턴이 있는지 확인하고 이를 "역참조" 패턴과 <LF>
문자로 바꿉니다.
답변2
여기서는 Perl 스타일 정규식을 사용하겠습니다.
$ echo "$s" | grep -Po '((^|\s)\K\S\s+)?\S{2,}'
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
확장 정규식을 사용하여 동일한 작업을 수행할 수 있지만 PCRE의 둘러보기가 없으므로 결국 선행 공백이 발생하게 됩니다.
$ echo "$s" | grep -Eo '((^|[[:blank:]])[^[:blank:]][[:blank:]]+)?[^[:blank:]]{2,}'
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
1자 단어 앞에 단어 경계 표시를 추가하고 싶지만 &
단어 문자가 아니므로 단어 경계가 유용하지 않습니다.