0

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

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

(似乎有效,据此!检查一下:http ://rubular.com/r/Jil0E4WZnW )

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

谢谢!

4

6 回答 6

0

另一种方法是使用tr

echo "Abc" | tr 'a-z' 'A-Z'
于 2013-04-29T05:29:08.713 回答
0

在 awk 中调用 toupper 函数:

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

得到你:

ABC
于 2013-04-29T04:01:53.683 回答
0

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

于 2013-04-29T04:03:04.253 回答
0

这个解决方案“作弊”,因为它使用循环和 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}'
于 2014-05-26T07:22:07.863 回答
0

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

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

(使用您的示例字符串)

于 2013-04-29T04:21:40.697 回答
0
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
> 

取自这里 这是 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
于 2013-04-29T08:55:07.550 回答