Linux 查找以“开始”开头的行;",;,继续使用元音,总长度为4

Linux 查找以“开始”开头的行;",;,继续使用元音,总长度为4,linux,bash,Linux,Bash,我有一个包含300多个单词的文件。我需要找到以“t”开头的行,以元音继续,总长度为4。然后我需要将它们转换成一种格式,其中每行有一个单词 tr -s "[[:blank:]]" "\n" < file | grep . 找到以“t”开头的字母,然后以总长度为4的元音继续。所以我们应该是这样的: tera train chair tola mourn tera tola 遵循perl oneliner perl -nle 'push @A,$_ for /\bt[ae

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

tr -s "[[:blank:]]" "\n" < file | grep .
找到以“t”开头的字母,然后以总长度为4的元音继续。所以我们应该是这样的:

tera  
train  
chair  
tola  
mourn
tera 
tola

遵循perl oneliner

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

perl-nle'push@A,$\ufor/\bt[aeiou]..\b/gi;END{print“@A”}”可以使用grep进行此操作。如果您只需要一行中的第一个单词:

grep -Eow '^t[aeiou]\S{2}' file > formatted_file
如果您需要匹配整条线路:

grep -Eow '^t[aeiou]\S{2}$' file > formatted_file
  • ^
    将搜索转到行的开头
  • t
    与字母“t”完全匹配
  • [aeiou]
    匹配
    [
    ]
    之间的任何一个字符
  • \S{2}
    匹配2个非空白字符
  • $
    匹配行尾
  • -w
    意味着grep将只匹配整个单词,这实际上将您的搜索限制为
    模式中指定的确切字符数
  • -o
    表示您只输出找到的精确匹配项(在本例中为您的4个字母单词)
编辑


如果您希望
grep
忽略大小写(大写/小写)

提供示例文件数据和预期输出,也可以使用
-i
选项。terra长度为5,tol为3,因此可能无法选择是的,很抱歉给您带来不便,我更正了示例。感谢您按要求添加信息,并对其进行了很好的格式化:)您能再澄清几点吗?输入文件每行只有一个字吗?仅由字母组成,或者也可以包含其他字符?有尾随空格吗?非常感谢你的回答和完美的解释。愚蠢的是,我发现我的输入文件不包含任何具有给定模式的单词。所以我要更改输入文件:因为我现在是bash的新手,我已经发现答案只会“打印”单词。那么,我如何将该推荐的输出打印到一个新文件中,或者使用该推荐的输出更改原始文件?@Oğulcanċelik您可以重新路由标准输出并写入一个文件,如上所示。在命令后使用
>formatted_file
将输出写入
formatted_file
我们还可以使用
-x
选项匹配整行。
grep -Eow '^t[aeiou]\S{2}' file > formatted_file
grep -Eow '^t[aeiou]\S{2}$' file > formatted_file