正規表現:同じ文字で始まる姓と名前を探す

正規表現:同じ文字で始まる姓と名前を探す

ファイルの内容で同じ文字で始まる名前と姓を含む行を見つける必要があります。私が試したすべては、名前の最初の文字だけを検索したり、何も出力しません。この問題を処理する方法に関するガイダンスを入手できますか?

解析する必要があるデータ:

Frank Smith
Jim Jones
William Tuft
Jill Johnston
Fred White
Sue Cream
Barbara Bennett
Jeff Gordo

このegrepコマンドを使用して見つけました。

egrep '(J[a-z]+ J)' addresses.txt

*個人情報保護のために住所を消去しました

答え1

$ grep -E '^[[:space:]]*([[:alpha:]])[[:alpha:]]*[[:space:]]+\1' yourfile.txt

このgrepコマンドは以下を検索します。あなたのファイル.txtのための:

  1. *行の先頭に空白文字(0以上を意味)、その後に空白文字
  2. ちょうど1つのアルファベット文字で、その後に
  3. 任意の数のアルファベット文字(*0以上を意味)、その後に
  4. 少なくとも1つの空白文字(+1つ以上を意味)、その後に
  5. ステップ2で一致する文字。\1これは逆参照実際の一致する文字列に最初括弧で囲まれた表現。

注:次のコマンド(使用基本的な変える拡大する正規表現)は上記と同じ効果を持ちます:

$ grep '^[[:space:]]*\([[:alpha:]]\)[[:alpha:]]*[[:space:]]\+\1' yourfile.txt

答え2

名前のリストがあるとします。

$ cat file
George Washington
Ronald Reagan
Barack Obama
Donald Trump

$ awk 'substr($1,1,1) == substr($NF,1,1)' file
Ronald Reagan

(=姓フィールド)を姓として使用すると、$NF中間名がある場合はうまく機能しますが、Jr.同じサフィックスがある場合は悲惨に失敗します。Mr.Dr.

答え3

egrep '(J[a-z]+ J)' file.txt

出力:

ジム・ジョーンズ

ジル・ジョンストン

関連情報