正規表現を使用して、他の特定の文字を含む行の文字の前にのみ表示される文字のリストを生成するにはどうすればよいですか?

正規表現を使用して、他の特定の文字を含む行の文字の前にのみ表示される文字のリストを生成するにはどうすればよいですか?

次のテキストファイルがあります。

407-OL?
408-2-OL?
408-OL?
418-het?
420-1 and 2- OL?
429-2-left unscored?
430-2-left both unscored?
431-1 and 2- Ri??
436-1-just homozygote?
444-2-het? ins. both
456-2-ins 246 despite slight OL
456-1-ins 245 (weaker)
457-2-Ri?

私は左(ダッシュの前)にある数字を返したいのですが、疑問符を含む行からのみ返したいと思います。つまり、私はこれを出力したいと思います。

407
408
408
418
420
429
430
431
436
444
457

答え1

おそらく最も簡単な方法は次のとおりです。cat some_file | grep '?' | cut -d'-' -f1

  • cat somefile=>コンテンツをsome_fileパイプラインに送信する
  • grep '?'=>以下を含む行のみをフィルタリングします。?
  • cut -d'-' -f1=>文字列を-フィールド区切り文字でフィールドに分割し、フィールド#1を印刷します。

答え2

sed通常、またはタスクは次のとおりですawk

sed -n '/?/s/-.*//p' some_file

awk -F- '/\?/{print$1}' some_file

答え3

次のように、正規表現で各数字をキャプチャする方が簡単です^\d+

grep '?' file.txt | grep -o '^\d\+'

どこ:

  • ^行の始まり
  • \d\+数字を複数回一致させます。

関連情報