查找與僅包含2個相同字符的單詞的單詞相匹配的RegEx。查找只匹配同一個字符的兩個實例的單詞
所以我們假設你正在尋找只有2個字符's'的單詞。
測試測試山姆助理通過lessclose會議
因此,從上面只能選擇「測試」和「通行證」,因爲它是有「S」
查找與僅包含2個相同字符的單詞的單詞相匹配的RegEx。查找只匹配同一個字符的兩個實例的單詞
所以我們假設你正在尋找只有2個字符's'的單詞。
測試測試山姆助理通過lessclose會議
因此,從上面只能選擇「測試」和「通行證」,因爲它是有「S」
一種使用方式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
這工作。謝謝。 –
#!/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'的字符分隔。
好點。謝謝 – TaninDirect
如果你的正則表達式引擎支持它,你可以用'\ b'代替'^'和'$'。 '\ b'匹配單詞邊界。 –
@WayneConrad不要那樣做,否則撇號和連字符會讓你失望。 – tchrist
考慮要求如不區分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
這也適用。謝謝。 –
怎麼樣的情況? 「測試」有兩個T嗎? – tchrist
可忽略的情況 –