2013-04-29 73 views
0

開始我有我的正則表達式表達找到3個字母詞與「一」 ...AWK正則表達式轉換3字母的單詞用「a」到大寫

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

(似乎工作開始,根據這個!檢查出來:http://rubular.com/r/Jil0E4WZnW

現在我需要知道如何採取該結果並用大寫三個字母的單詞替換小寫字。

謝謝!在AWK

+0

http://theunixshell.blogspot.com/2013/01/caplitalizechange-to-uppercase-first.html – Vijay 2013-04-29 09:01:16

+0

你貼什麼是正則表達式。不同的工具理解不同的正則表達式格式, BREs vs EREs,有些會理解像\ b這樣的縮寫,有些只會接受像[[:blank:]]這樣的POSIX字符類。等等,所以你不能只寫一個RE並且說'似乎工作',因爲這個RE意味着你將使用哪個工具。你用幾個工具標記了這些,其中沒有一個是ruby,然後提供了一個顯然是Ruby RE評估器的鏈接,所以我們不知道你想做什麼。顯示樣本輸入和預期輸出。 – 2013-04-29 12:54:18

+0

謝謝埃德...對不起,我不是更清楚。我正在嘗試使用unix創建一個awk腳本。我想爲ass,ant和猿使用gsub,然後找到這些單詞,然後用ASS,ANT或APE替換它們。我怎樣才能讓gsub找到這些單詞,將它們替換爲它們的大寫字母,然後只打印修改過的行? – user2330672 2013-04-29 23:05:41

回答

0

調用TOUPPER功能:

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

讓你:

ABC 
+0

對不起,我不是更清楚。我正在嘗試使用unix創建一個awk腳本。我想爲ass,ant和猿使用gsub,然後找到這些單詞,然後用ASS,ANT或APE替換它們。我怎樣才能讓gsub找到這些單詞,將它們替換爲它們的大寫字母,然後只打印修改過的行? – user2330672 2013-04-29 23:08:02

0

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

0

用sed可以做到這一點是這樣的:

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

(與你的例子字符串)

+0

謝謝!你知道我可以在AWK中做到這一點嗎? – user2330672 2013-04-29 15:18:27

0

另一種方法是使用tr

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

對不起,我不是更清楚。我正在嘗試使用unix創建一個awk腳本。我想爲ass,ant和猿使用gsub,然後找到這些單詞,然後用ASS,ANT或APE替換它們。我怎樣才能讓gsub找到這些單詞,將它們替換爲它們的大寫字母,然後只打印修改過的行? – user2330672 2013-04-29 23:06:21

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 
+0

謝謝,你知道如何做到這一點,但在AWK? – user2330672 2013-04-29 15:47:26

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}' 
相關問題