【问题标题】:bash check vowels with regular expressionbash 用正则表达式检查元音
【发布时间】:2015-03-23 01:14:35
【问题描述】:

如何使用正则表达式检查文本文件中每个单词的第一个字母是否没有元音 (aeiou)。这个我试过了

grep [!^"aeiou"] file.txt

它有点作用,但它突出显示了元音,而不是第一个不是元音的字母。

【问题讨论】:

  • pseudo-code 是一个字还是两个字? we're 怎么样?提供示例输入和预期输出,并包括您可以想象编写脚本难以正确处理的情况。
  • 未来在 bash 中编码的提示:如果您希望将某些字符串完全传递给命令(在本例中为 grep),而不先由 bash 解析,请在单引号。所以你的 grep 行应该看起来像:grep '[^aeiou]' file.txt 目前,[] 将首先由bash 处理,因为它们是与bash..的通配符匹配的文件。

标签: regex bash grep


【解决方案1】:

您可以使用基于后视的正则表达式来突出显示每个单词中的第一个字母,该字母不能是元音。

grep -Pi '(?<!\S)[^aeiou]' file

【讨论】:

  • 这样只标记第一个非元音字母,在the 这样的单词中标记th,在cruise 中标记cr。我并不是说这是一个问题。
  • @Jotne 你上面说的是什么意思,它正确地突出了the 中的tcruise 中的c
  • 在我的 ubuntu 中,th 在单词 the 中是红色的,我希望只有第一个字母 t 是红色的。如果我测试这个echo "tea the" | grep -Pi '(?&lt;!\S)[^aeiou]',我会得到三个红色的字母。 tteaththe
  • @Jotne 奇怪的是它对我来说非常有效。您正在运行哪个版本的 Ubuntu? (?&lt;!\S) 是一个断言,它断言匹配项前面不能有非空格字符。而下面的[^aeiou] 只匹配一个字符。所以这会在和茶中突出显示t
  • 嗯。 14.10 (Gnu grep 2.20) 给出错误。 12.04.5(Gnu grep 2.10)好的。 14.04.2 (Gnu grep 2.16) 好的
【解决方案2】:

这是一个awk,如果它不是元音,则将单词中的第一个字母标记为红色。

awk '{for (i=1;i<=NF;i++) {s=substr($i,1,1);if (tolower(s)~/[^aeiou]/) $i="\033[1;31m"s"\033[0m"substr($i,2)}}1' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2015-03-12
    • 2011-12-19
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多