다음과 같은 텍스트 파일이 있습니다.
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\+
숫자 문자를 여러 번 일치시킵니다.