2012-09-20 41 views
0

查找與僅包含2個相同字符的單詞的單詞相匹配的RegEx。查找只匹配同一個字符的兩個實例的單詞

所以我們假設你正在尋找只有2個字符's'的單詞。

測試測試山姆助理通過lessclose會議

因此,從上面只能選擇「測試」和「通行證」,因爲它是有「S」

+0

怎麼樣的情況? 「測試」有兩個T嗎? – tchrist

+0

可忽略的情況 –

回答

0

一種使用方式GNU awk

如果只搜索兩個小寫的'字符:

awk '{ for (i=1; i<=NF; i++) if (gsub(/s/,"s",$i) == 2) print $i }' file.txt 

如果你想忽略大寫和小寫的'字符(即匹配或者一個 's' 或和 'S'),嘗試:

awk '{ for (i=1; i<=NF; i++) { s_count = gsub(/s/,"s",$i); S_count = gsub(/S/,"S",$i); if (s_count + S_count == 2) print $i } }' file.txt 

結果:

Tests 
pass 
+0

這工作。謝謝。 –

1
兩個實例的唯一的一句話
#!/bin/bash 
regex='^[^sS]*[sS][^sS]*[sS][^sS]*$' 
for word in Test Tests Sam assistant pass 
do 
    if [[ $word =~ $regex ]]; then 
    echo $word 
    fi 
done; 

這查找2或'S'字符,由零個或多個不是's'或'S'的字符分隔。

+0

好點。謝謝 – TaninDirect

+0

如果你的正則表達式引擎支持它,你可以用'\ b'代替'^'和'$'。 '\ b'匹配單詞邊界。 –

+0

@WayneConrad不要那樣做,否則撇號和連字符會讓你失望。 – tchrist

0

考慮要求如不區分sensetive

使用:

echo "Test Tests Sams assistant pass lessclose session" | tr " " "\n" | awk '{FS="[sS]"} {if (NF==3) {print}}' 

輸出:

Tests 
Sams 
pass 

以其他方式使用:

echo "Test Tests Sams assistant pass lessclose session" | tr " " "\n" | awk '{FS="[s]"} {if (NF==3) {print}}' 

輸出:

Tests 
pass 
+0

這也適用。謝謝。 –

相關問題