找到以“t”开头的行,继续元音,总长度为4

时间:2017-05-02 12:02:34

标签: linux bash

我有一个包含300多个单词的文件。我需要找到以“t”开头的行,继续使用元音,总长度为4.然后我需要将它们转换为每行有一个单词的格式。

tr -s "[[:blank:]]" "\n" < file | grep .

有了这个我能够格式化文件,但我无法弄清楚如何选择具有上述要求的单词。我被困了:/

即。我有一个文件,其中包括“terra train chair tol mourn”。我需要像这样格式化这个文件:

tera  
train  
chair  
tola  
mourn

找到以“t”开头的并继续使用总长度为4的元音。所以应该是这样的:

tera 
tola

2 个答案:

答案 0 :(得分:6)

可以使用grep。如果您只需要一行中的第一个单词:

grep -Eow '^t[aeiou]\S{2}' file > formatted_file

如果你需要匹配整行:

grep -Eow '^t[aeiou]\S{2}$' file > formatted_file
  • ^无法搜索到该行的开头。
  • t完全匹配字母&#34; t&#34;。
  • [aeiou]匹配[]之间的任何一个字符。
  • \S{2}匹配2个非空格字符
  • $匹配行尾
  • -w表示grep只会匹配整个单词,这实际上会将您的搜索范围限制为PATTERN中指定的确切字符数。
  • -o表示您只输出找到的完全匹配项(在本例中为您的4个字母的单词)

修改

如果希望-i忽略大小写(大写/小写),也可以使用grep选项

答案 1 :(得分:1)

关注perl oneliner

perl -nle 'push @A,$_ for /\bt[aeiou]..\b/gi;END{print"@A"}' <file

目前尚不清楚一条输入线是否有多个单词,或者输出的所有单词是否都在一行上。

perl -nle 'print for /\bt[aeiou]..\b/gi' <file

以下更新grep足以完成此项工作

grep -i '^t[eaiou][a-z][a-z]$' <file