【问题标题】:AWK regex convert 3 letter word beginning with 'a' to uppercaseAWK正则表达式将以'a'开头的3个字母单词转换为大写
【发布时间】:2013-04-22 15:56:37
【问题描述】:

我有我的正则表达式来查找以“a”开头的 3 个字母单词...

\b[aA][a-z]{2}\b

(根据这个似乎可以工作!检查一下:http://rubular.com/r/Jil0E4WZnW

现在我需要知道如何获取该结果并将小写单词替换为大写的三个字母单词。

谢谢!

【问题讨论】:

  • 您发布的是正则表达式。不同的工具理解不同的正则表达式格式,例如BRE 与 ERE,有些人会理解像 \b 这样的缩写,有些人只会接受像 [[:blank:]] 这样的 POSIX 字符类。等等,所以您不能只写一个 RE 并说 seems to work,因为 RE 的含义在很大程度上取决于您使用的工具。你用几个工具标记了这个,这些工具都不是 ruby​​,然后提供了一个显然是 Ruby RE 评估器的链接,所以我们不知道你想做什么。显示示例输入和预期输出。
  • 谢谢 Ed... 对不起,我不是更清楚。我正在尝试使用 unix 创建一个 awk 脚本。我想将 gsub 用于 Ass、Ant 和 Ape 并找到这些词,然后用 eitehr ASS、ANT 或 APE 替换它们。如何让 gsub 找到这些单词,将它们替换为对应的大写单词,然后只打印修改后的行?

标签: regex shell unix awk


【解决方案1】:

在 awk 中调用 toupper 函数:

echo "Abc" | awk '{print toupper($0)}'

让你:

ABC

【讨论】:

  • 对不起,我不是更清楚。我正在尝试使用 unix 创建一个 awk 脚本。我想将 gsub 用于 Ass、Ant 和 Ape 并找到这些词,然后用 eitehr ASS、ANT 或 APE 替换它们。如何让 gsub 找到这些单词,将它们替换为对应的大写单词,然后只打印修改后的行?
【解决方案2】:

您可以使用 PERL 的uc($string); 命令。

【讨论】:

    【解决方案3】:

    你可以像这样用 Sed 做到这一点:

    echo 'Ass ass ant Ant' | sed -re 's/\ba[a-z]{2}\b/\U&/gI'
    

    (使用您的示例字符串)

    【讨论】:

    • 谢谢!你知道我如何在 AWK 中做到这一点吗?
    【解决方案4】:

    另一种方法是使用tr:

    echo "Abc" | tr 'a-z' 'A-Z'
    

    【讨论】:

    • 对不起,我不是更清楚。我正在尝试使用 unix 创建一个 awk 脚本。我想将 gsub 用于 Ass、Ant 和 Ape 并找到这些词,然后用 eitehr ASS、ANT 或 APE 替换它们。如何让 gsub 找到这些单词,将它们替换为对应的大写单词,然后只打印修改后的行?
    【解决方案5】:

    这个解决方案“作弊”,因为它使用循环和 sub 而不是 gsub,但它在 awk 中并且可以工作。

    echo "abc Ape baaa ab abcd ant" | awk '{for (i=1;i<=NF;i++) if (length($i)==3){sub(/[aA][a-z]{2}/,toupper($i),$i)};print}'
    

    【讨论】:

      【解决方案6】:
      perl -pe '$_=~s/\b([aA][a-z]{2})\b/\U$1/g;' your_file
      

      测试:

      > echo "Abc ab Ab" | perl -pe '$_=~s/\b([aA][a-z]{2})\b/\U$1/g;'
      ABC ab Ab
      > 
      

      取自here 这是 awk 版本:

      awk '{for(i=1;i<=NF;i++)
            if((length($i)==3) && $i~/[aA][a-zA-Z][a-zA-Z]/)
            $i=toupper($i)
           }1' your_file
      

      【讨论】:

      • 谢谢,您知道如何在 AWK 中执行此操作吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多