
次のテキストファイルがあります。
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\+
数字を複数回一致させます。