awk, sed, grep을 사용하여 한 단어의 여러 장을 새 줄에 인쇄합니다.

awk, sed, grep을 사용하여 한 단어의 여러 장을 새 줄에 인쇄합니다.

텍스트 파일이 있는데 각 단어(여러 문자)를 새 줄에 인쇄하고 싶습니다. 단어가 단일 문자로 구성된 경우 다음 단어의 일부로 처리되어 새 줄에 인쇄되어야 합니다. 두 단어 사이에 있으면 두 번째 단어 뒤에 와야 합니다. 예:

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자 단어 앞에 단어 경계 표시를 추가하고 싶지만 &단어 문자가 아니므로 단어 경계가 유용하지 않습니다.

관련 정보