파일의 각 줄에서 처음 나타나는 숫자 찾기

파일의 각 줄에서 처음 나타나는 숫자 찾기

파일의 각 줄에서 처음 나타나는 숫자를 캡처할 수 있는 방법이 있습니까?

test예를 들어, 다음과 유사한 내용을 가진 파일이 있습니다 .

AA111 1 DFJKD BKJ3 () A G C TT

BB112 DKFJ 32 JDKFJ JE () DF

113 BDNF 33 3()

원하는 출력은

111

112

113

입력의 각 줄은 영숫자 문자(예: 문자 또는 숫자, 특수 문자 없음)로 시작됩니다.

답변1

다음은 몇 가지 방법입니다.

sed 's/^[^0-9]*\([0-9]\+\).*/\1/' test
cat test | tr -c '0-9\n' ' ' | while read first rest; do echo $first; done
gawk -F '[^0-9]+' '{print $2}' test  # requires non-digits to start line
perl -nE'say/(\d+)/?$1:""' test      # code golf

큰 타격:

while read line; do [[ $line =~ [[:digit:]]+ ]] && echo ${BASH_REMATCH[0]} || echo; done

답변2

sed에서 이를 수행하는 한 가지 방법은 다음과 같습니다.

sed -n 's/^[^[:digit:]]*\([[:digit:]]*\).*/\1/; /[[:digit:]]/p' test > test.out

이것:

  1. 숫자가 아닌 잠재적인 선행 문자를 제거하고,
  2. 숫자와 (다른 것)을 캡처하여 \1( ) 숫자로 바꿉니다.
  3. 줄에 숫자가 포함되어 있으면 인쇄합니다(그렇지 않으면 기본값은 해당 -n줄을 인쇄하지 않는 것입니다).

(내 원래 sed 문을 일부 압축하도록 장려한 glenn에게 찬사를 보냅니다)

답변3

grep을 사용하십시오.

grep -oP '^\D*\K\d+' File

관련 정보