0

同じ文字のインスタンスを 2 つだけ含む単語に一致する正規表現を探します。

では、文字「s」が 2 つしかない単語を探しているとしましょう。

テスト テスト サム アシスタント パス lessclose セッション

上記から、「s」のインスタンスが 2 つある唯一の単語であるため、「Tests」と「pass」のみを選択する必要があります。

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' ではない 0 個以上の文字で区切られた 2 つの 's' または 'S' 文字を探します。

于 2012-09-20T23:41:25.550 に答える
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 に答える
0

を使用した片道GNU awk

小文字の 's' 文字を 2 つだけ検索する場合:

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 に答える