共通接頭辞を持つ語根を検索する正規表現

共通接頭辞を持つ語根を検索する正規表現

私は最近、「pro-」と「con-」をプレフィックスとして共有する辞書の単語について疑問に思いました。例えば、行進/譲歩、生産/指導、告白/告白、進歩/党大会などがある。デフォルトでは、一致^pro(.+)$する単語と^con(.+)$キャプチャグループの内容が同じ単語を探しています。

私の元の生のコマンドは次のとおりです。

sed -nr 's/^con(.+)$/\1/Ip' /usr/share/dict/words | \
xargs -I SUFFIX -n1 grep -i '^proSUFFIX$' /usr/share/dict/words

一致する「pro-」単語があるたびに、全体の「con-」単語を出力するのがうまくいくようです。問題は、速度が非常に遅いことです。潜在的な一致ごとに呼び出されるので、grep毎回辞書全体を検索する必要があります。 up / downという単語だけを含む一時ファイルを作成して作業を高速化できますが、ファイルを作成せずにこれを実行する効率的な方法が必要です。

この種のクロス検索に最適なツールはGNUの世界にありますか?

ベストアンサー1

質問自体に関する以前のコメントから:

egrep '^(pro|con).* /usr/share/dict/words | sed -nE 's/^(pro|con)(.*)/\2/p' | sort | uniq -d 

proとconの接頭辞の両方を含むすべての同義語のリストを提供します。

イニシャルは、接頭辞が付いたすべてのegrep単語をキャプチャします。次に、listを使用して各単語の先頭から合計を削除し、次のように表示します。proconsedproconsortuniq -dオニリストに重複した項目があります。

おすすめ記事