Linuxを使用してファイル内の同じ文字で始まり、終わる単語を検索する方法grep注文する?私はいくつかの答えを試しましたが、役に立ちませんでした。ありがとうございます!
ベストアンサー1
入力に1行に1つの単語が含まれていると仮定すると、次のようになります。
grep -x '\(.\).*\1' file
...同じ文字で始まり、終わるすべての行を抽出します。これは、行の最初の文字キャプチャを使用し、行の残りの文字が\(.\)
何でもすることを許可し、それと一緒に.*
逆参照を使用して、最後のキャプチャされた文字と一致するように強制することによって行われます\1
。
このオプションは、パターンが行の一部ではなく行全体と一致する必要があることをユーティリティに-x
通知します。grep
それ以外の場合は、-x
正規表現に明示的なアンカーを挿入して行全体が一致することを確認する必要があります。^\(.\).*\1$
私のシステム辞書で実行される例は、最初の5つの結果のみを表示します。
$ grep -x '\(.\).*\1' /usr/share/dict/words | head -n 5
aa
aba
abaca
abasia
abepithymia
1行にスペースで区切られた複数の単語を含む入力を処理する場合は、最初にテキストを1行に1単語に分割してテキストを前処理できます。ここでは、tr
空白を改行に置き換え、次のように重複する項目を削除しながら、すべての文字を小文字にさらに変換しますsort -u
。
tr ' [:upper:]' '\n[:lower:]' <file | sort -u | grep -x '\(.\).*\1'
これは、「通常のテキスト」に句読点や単語の一部ではない他の文字が含まれる可能性があることを無視することに注意してください。
grep
コマンドが技術的に同じ文字で始まり、終わる単一文字の単語を省略したことが注釈(現在削除されている)から指摘されています。
これを得るには:
grep -x -e '\(.\).*\1' -e . file
これで、同じ文字で始まり、終わる行または単一の文字のみを含む行が返されます。