AWK正则表达式将以'a'开头的3个字母单词转换为大写

时间:2013-04-29 03:52:43

标签: regex shell unix awk

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

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

(根据这个似乎有效!检查出来:http://rubular.com/r/Jil0E4WZnW

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

谢谢!

6 个答案:

答案 0 :(得分:0)

在awk中调用toupper函数:

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

得到你:

ABC

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用Sed这样做:

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

(使用您的示例字符串)

答案 3 :(得分:0)

另一种方法是使用tr

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

答案 4 :(得分: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
> 

取自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

答案 5 :(得分:0)

这个解决方案“欺骗”,因为它使用循环和子而不是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}'