寻找一个匹配仅包含 2 个相同字符实例的单词的正则表达式。
因此,假设您正在寻找只有 2 个字符 's' 实例的单词。
测试测试 Sam 助手通过 lessclose 会话
所以从上面它应该只选择“测试”和“通过”,因为它是唯一有两个“s”实例的词
#!/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;
这会查找由零个或多个不是“s”或“S”的字符分隔的 2 个“s”或“S”字符。
一种使用方式GNU awk
:
如果您只搜索两个小写的 's' 字符:
awk '{ for (i=1; i<=NF; i++) if (gsub(/s/,"s",$i) == 2) print $i }' file.txt
如果您想忽略大小写的“s”字符(即匹配“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
将要求视为不区分大小写
采用:
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