我有一个如下所示的文本文件:
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 '?'
=> 仅过滤包含 a 的行?
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\+
多次匹配任何数字字符