Unix:用2个单词和换行符替换2个单词

时间:2013-10-05 12:28:06

标签: variables unix sed wildcard tr

我有一份学校的UNIX作业。 我们必须采用以下文本并列出所有连续的单词。 例如,句子:'这是我的第一个问题。'必须成为:

这是

是我的

我的第一个

第一个问题

(没有标点符号或数字)

这是我们需要更改的文本文件: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取代&word; word1(space)word2'通过' word1(空格)word2 \ n' 但是如何在tr或sed中指定任何单词?我已经尝试了*但它没有用(我可能做错了)

2 个答案:

答案 0 :(得分:0)

你需要使用RegExp的替代命令。

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

[a-z] +匹配1个或多个char。 \(\)将匹配存储到内存中,\ 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的字符或带空格的空格。将所有多个空格挤压到一个空格。在文件的开头和结尾剪掉空格。 替换非空格的所有出现后跟一个空格,后跟一个非空格,后跟一个非空格后跟一个空格,后跟一个空格,后跟一个非空格后跟一个换行符。并打印。