如何使用 grep 命令获取连续包含六个或更多辅音的单词列表?
How can I get a list of the words that have six or more consonants in a row using the grep command?
我想从多个文本文件中找到连续包含六个或更多辅音的单词列表。
我是 Unix 终端的新手,但这是我尝试过的:
cat *.txt | grep -Eo "\w+" | grep -i "[^AEOUIaeoui]{6}"
我在这里使用 cat 命令,否则它将在下一个管道中包含文件名。我使用第二个管道获取文本文件中所有单词的列表。
问题是最后一个管道,我想以某种方式让它连续 grep 6 个辅音,它不需要是同一个。我会知道一种解决问题的方法,但这会创建一个比整个 post.
更长的命令
您可以使用
grep -hEio '[[:alpha:]]*[b-df-hj-np-tv-z]{6}[[:alpha:]]*' *.txt
正则表达式详细信息
[[:alpha:]]*
- 任意零个或多个字母
[b-df-hj-np-tv-z]{6}
- 末尾六个英文辅音字母
[[:alpha:]]*
- 任意零个或多个字母。
grep
选项使正则表达式搜索不区分大小写 (i
) 并且 grep
仅显示匹配的文本(使用 o
)而不显示文件名 (h
). -E
选项允许 POSIX ERE 语法,否则,如果您不指定它,则需要将 {6}
转义为 \{6\}
、
对于最后一个 grep
,您还需要 -E
开关 - 或者您需要转义花括号:
cat *.txt | grep -Eo "\w+" | grep -Ei "[^AEOUIaeoui]{6}"
cat *.txt | grep -Eo "\w+" | grep -i "[^AEOUIaeoui]\{6\}"
I use the cat command here because it will otherwise include the file names in the next pipe
您可以使用 -h
标志禁用此功能:
grep -hEo "\w+" *.txt | grep -Ei "[^AEOUIaeoui]{6}"
使用这个 Perl 单行代码:
perl -lne 'print for grep { /[^aeoui]{6}/i } /\b([a-z]+)\b/ig' in_file.txt
示例:
cat > in_file.txt <<EOF
the abcdfghi aBcdfghi.
ABCDFGHI234
abcdEfgh
EOF
perl -lne 'print for grep { /[^aeoui]{6}/i } /\b([a-z]+)\b/ig' in_file.txt
输出:
abcdfghi
aBcdfghi
Perl 单行代码使用这些命令行标志:
-e
: 告诉 Perl 查找内联代码,而不是在文件中。
-n
:一次循环输入一行,默认分配给 $_
。
-l
: 在执行内联代码之前去除输入行分隔符(默认情况下在 *NIX 上为 "\n"
),并在打印时附加它。
正则表达式使用这些修饰符:
/g
: 多个匹配。
/i
: 不区分大小写的匹配。
/\b([a-z]+)\b/ig
: 匹配仅由 1 个或多个字母组成的单词 ([a-z]+
),两边的单词边界 \b
.这样,ABCDFGHI234
不匹配,但第 1 行中的所有 3 个词(the
、abcdfghi
、aBcdfghi
)都匹配。这对于某些应用程序可能很重要。 请注意,并非此线程中的所有答案都使用字母周围的单词边界,因此不要进行此示例中所示的区分。
/[^aeoui]{6}/i
:匹配 6 个或更多连续的非元音字母。这里的非元音字母完全解析为辅音字母,因为之前的正则表达式仅选择由 字母 组成的单词,即元音字母和辅音字母。
另见:
perldoc perlrun
: how to execute the Perl interpreter: command line switches
perldoc perlre
: Perl regular expressions (regexes)
perldoc perlre
: Perl regular expressions (regexes): Quantifiers; Character Classes and other Special Escapes; Assertions; Capture groups
perldoc perlrequick
: Perl regular expressions quick start
获取给定目录中连续包含 6 个或更多辅音的所有单词
cat *.txt | grep -Eo "\w+" | grep -E "[^AEOUIaeoui]{6,}"
我们可以使用grep -Eo
(-E Extended regex, -o output ONLY matching)
cat *.txt
将输出当前目录下所有txt文件的所有数据
grep -Eo "\w+"
将以每行一个单词的形式输出来自输入的所有单词
我们可以使用 Regex 来搜索包含模式的字符串:
[^LISTOFCHARACTERS]
除了 LISTOFCHARACTERS 之外的任何字符
{6,}
6 个或更多
我想从多个文本文件中找到连续包含六个或更多辅音的单词列表。
我是 Unix 终端的新手,但这是我尝试过的:
cat *.txt | grep -Eo "\w+" | grep -i "[^AEOUIaeoui]{6}"
我在这里使用 cat 命令,否则它将在下一个管道中包含文件名。我使用第二个管道获取文本文件中所有单词的列表。
问题是最后一个管道,我想以某种方式让它连续 grep 6 个辅音,它不需要是同一个。我会知道一种解决问题的方法,但这会创建一个比整个 post.
更长的命令您可以使用
grep -hEio '[[:alpha:]]*[b-df-hj-np-tv-z]{6}[[:alpha:]]*' *.txt
正则表达式详细信息
[[:alpha:]]*
- 任意零个或多个字母[b-df-hj-np-tv-z]{6}
- 末尾六个英文辅音字母[[:alpha:]]*
- 任意零个或多个字母。
grep
选项使正则表达式搜索不区分大小写 (i
) 并且 grep
仅显示匹配的文本(使用 o
)而不显示文件名 (h
). -E
选项允许 POSIX ERE 语法,否则,如果您不指定它,则需要将 {6}
转义为 \{6\}
、
对于最后一个 grep
,您还需要 -E
开关 - 或者您需要转义花括号:
cat *.txt | grep -Eo "\w+" | grep -Ei "[^AEOUIaeoui]{6}"
cat *.txt | grep -Eo "\w+" | grep -i "[^AEOUIaeoui]\{6\}"
I use the cat command here because it will otherwise include the file names in the next pipe
您可以使用 -h
标志禁用此功能:
grep -hEo "\w+" *.txt | grep -Ei "[^AEOUIaeoui]{6}"
使用这个 Perl 单行代码:
perl -lne 'print for grep { /[^aeoui]{6}/i } /\b([a-z]+)\b/ig' in_file.txt
示例:
cat > in_file.txt <<EOF
the abcdfghi aBcdfghi.
ABCDFGHI234
abcdEfgh
EOF
perl -lne 'print for grep { /[^aeoui]{6}/i } /\b([a-z]+)\b/ig' in_file.txt
输出:
abcdfghi
aBcdfghi
Perl 单行代码使用这些命令行标志:
-e
: 告诉 Perl 查找内联代码,而不是在文件中。
-n
:一次循环输入一行,默认分配给 $_
。
-l
: 在执行内联代码之前去除输入行分隔符(默认情况下在 *NIX 上为 "\n"
),并在打印时附加它。
正则表达式使用这些修饰符:
/g
: 多个匹配。
/i
: 不区分大小写的匹配。
/\b([a-z]+)\b/ig
: 匹配仅由 1 个或多个字母组成的单词 ([a-z]+
),两边的单词边界 \b
.这样,ABCDFGHI234
不匹配,但第 1 行中的所有 3 个词(the
、abcdfghi
、aBcdfghi
)都匹配。这对于某些应用程序可能很重要。 请注意,并非此线程中的所有答案都使用字母周围的单词边界,因此不要进行此示例中所示的区分。
/[^aeoui]{6}/i
:匹配 6 个或更多连续的非元音字母。这里的非元音字母完全解析为辅音字母,因为之前的正则表达式仅选择由 字母 组成的单词,即元音字母和辅音字母。
另见:
perldoc perlrun
: how to execute the Perl interpreter: command line switches
perldoc perlre
: Perl regular expressions (regexes)
perldoc perlre
: Perl regular expressions (regexes): Quantifiers; Character Classes and other Special Escapes; Assertions; Capture groups
perldoc perlrequick
: Perl regular expressions quick start
获取给定目录中连续包含 6 个或更多辅音的所有单词
cat *.txt | grep -Eo "\w+" | grep -E "[^AEOUIaeoui]{6,}"
我们可以使用grep -Eo
(-E Extended regex, -o output ONLY matching)
cat *.txt
将输出当前目录下所有txt文件的所有数据
grep -Eo "\w+"
将以每行一个单词的形式输出来自输入的所有单词
我们可以使用 Regex 来搜索包含模式的字符串:
[^LISTOFCHARACTERS]
除了 LISTOFCHARACTERS 之外的任何字符
{6,}
6 个或更多