2013-10-05 47 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 ' ' 

基本上,我只是删除换行符,标点符号,数字和连续的空格准备我的文字。从这里起,我被卡住了。

我的想法是让Linux用'word1(space)word2 \ n' 替换'word1(space)word2',但是我怎样才能在tr或sed中指定任何单词?我已经尝试*但它没有工作(我可能做错了什么)

回答

0

您需要sed的替代命令使用RegExp。

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

[a-z] +匹配1个或多个字符。 \(\)将匹配存储到内存中,\ 1回想起它。

0

这可能为你工作(GNU SED):

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

啜食文件到内存中。将所有不是a-z或A-Z的字符或空格替换为空格。将所有多个空间挤压到一个空间。在文件的开头和结尾处切断空格。 替换所有出现的非空格,后跟空格,后跟非空格,后跟空格,非空格,后跟空格,后跟非空格,后跟换行符。并打印。