Linux 查找以“开始”开头的行;",;,继续使用元音,总长度为4
我有一个包含300多个单词的文件。我需要找到以“t”开头的行,以元音继续,总长度为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
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