`grep`でいくつかの基準を持つ単語を見つけます(スクラブル用)


0

「sowpods.txt」という名前のダウンロードしたスクラブル単語リストを使用grepしていますが、これらの基準を持つすべての単語を検索しようとしています。

  • 7文字の単語
  • 同じ文字で始まり、終わる
  • 同じ2番目、4番目、6番目の文字がある
  • 3番目と5番目の文字が異なる

これまでのライン

grep -i "^(.).*\1$" sowpods.txt > output.txt

バックリファレンスエラーが発生するため、オンラインガイドを使用してみましたが、非常に混乱していました。これも可能ですか?もしそうなら誰かが助けてくれますか?

私はMacで、デフォルトのターミナルを使用しています。


1
あなたの前の質問には、あなたが必要と示したgrep -Eか、括弧をエスケープします。これにより、後方参照エラーが解消されます。これで続行できます。なぜ(部分的に)同じ問題について尋ねているのですか?他の質問に対する解決策はMacで機能しませんか?そうでない場合、正しい問題は、同じ問題を二度目に提起する代わりに、あなたを助け、他の質問を最初に解決しようとしたユーザーにフィードバックを与えることです。
カミルマシオロウスキ

ああ、私はEが問題であるとは理解していませんでした。私は今持っているコードの行からどこに行くべきか実際にはわかりませんが:(
。– Kappa123

1
OK 他の質問が解決した場合は、そこで回答の1つを受け入れてください(ツアーに参加して動作を確認してください)。また、現在の質問を編集して、「後方参照エラー」に言及しないようにする必要があります。これは、対処方法がわかっており、問題ではない(問題の一部でもない)ためです。の本当の問題に集中してください。「後方参照エラー」が唯一の問題である場合、この質問は削除するか、少なくとも他の質問の複製として閉じる必要があります。
カミルマシオロウスキ

2番目の文字を最初の文字と同じにすることはできますか?3番目は2番目と同じにすることはできますか?... 質問編集して、テストケースを追加しください。
トト

回答:


1

使用-P可能な場合は、システム上のオプション(PCRE)を:

grep -P '^(?=[a-zA-Z]{7}$)(.)(?!\1)(.)(?!\1)(?!\2)(.)\2(?!\1)(?!\2)(?!\3).\2\1$' inputfile

説明:

^
  (?=[a-zA-Z]{7}$)  : positive lookahead, zero-length assertion that make sure we have exactly 7 letters. You may use \pL{7} if you want to deal with any laguage
  (.)               : first letter, captured in group 1
  (?!\1)            : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 1 after
  (.)               : second letter, captured in group 2
  (?!\1)            : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 1 after
  (?!\2)            : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 2 after
  (.)               : third letter, captured in group 3
  \2                : fourth letter == second letter
  (?!\1)            : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 1 after
  (?!\2)            : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 2 after
  (?!\3)            : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 3 after
  .                 : fifth letter
  \2                : sixth letter == second letter
  \1                : seventh letter == first letter
$

デモ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.