0

寻找一个匹配仅包含 2 个相同字符实例的单词的正则表达式。

因此,假设您正在寻找只有 2 个字符 's' 实例的单词。

测试测试 Sam 助手通过 lessclose 会话

所以从上面它应该只选择“测试”和“通过”,因为它是唯一有两个“s”实例的词

4

3 回答 3

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;

这会查找由零个或多个不是“s”或“S”的字符分隔的 2 个“s”或“S”字符。

于 2012-09-20T23:41:25.550 回答
0

一种使用方式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
于 2012-09-21T01:06:25.860 回答
0

将要求视为不区分大小写

采用:

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
于 2012-09-21T07:15:16.280 回答