2013-10-05 1 views
-1

학교용 UNIX 지정이 있습니다. 다음 텍스트를 가져 와서 모든 연속 단어의 목록을 만들어야합니다. 예를 들어, '이것은 내 첫 번째 질문입니다.' 이 될 것이다 :Unix : 2 단어를 2 단어와 개행으로 바꾸십시오.

것은 내

처음

첫 번째 질문

(어떤 문장 부호하거나 번호)

이 텍스트 파일이 우리 변경 필요 : https://docs.google.com/file/d/0BwTO3Dwf7nQfSFU5TEpLZ1BlVHM/edit?usp=sharing

$ cat reservoir.txt | tr -d "\n," | tr -d -c [A-Z,a-z," "] | tr -s ' ' 

기본적으로, 난 그냥 내 텍스트를 준비하는 뉴 라인, 문장 부호, 숫자 및 반복 공백을 제거 :이것은 내가 지금까지있는 것입니다. 여기에서 나는 붙어있다.

제 아이디어는 'word1 (공백) word2 \ n' 에 의해 'word1 (공백) word2'를 대체하도록하는 것이지만 tr 또는 sed에 어떤 단어를 어떻게 지정할 수 있습니까? 나는 이미 *을 시도했지만 작동하지 않았다. (나는 아마도 잘못했다.)

답변

0

RegExp를 사용하여 sed의 대체 명령이 필요하다.

| sed 's/\b\([a-z]\+\)/\1\n\1/g' 

+ 1 개 이상의 문자에 대해 일치합니다. \ (\)는 메모리에 일치 항목을 저장하고 \ 1은이를 찾습니다.

0

당신 (GNU이 나오지도)에 대한이 작동 될 수 있습니다

sed -r ':a;$!{N;ba};s/[^[:alpha:] ]/ /g;s/ +/ /g;s/^ | $//g;s/(\S+ \S+) /\1\n/g' file 

소리내어 먹는다 메모리에 파일을 저장합니다. a-z 또는 A-Z가 아닌 모든 문자 또는 공백을 공백으로 대체하십시오. 모든 여러 공백을 하나의 공백으로 집어 넣습니다. 파일의 처음과 끝에 공백을 잘라냅니다. 공백이 아닌 모든 공백을 공백 다음에 비 공백 다음에 공백이 아닌 공백 다음에 공백이오고 그 뒤에 공백이 나오고 개행 문자가 따라옵니다. 그리고 인쇄해라.