다음을 포함하는 각 행에서 고유한 문자열을 추출합니다.

다음을 포함하는 각 행에서 고유한 문자열을 추출합니다.

다음은 파일의 텍스트 블록 예입니다.


Now is the time for all blah:1; to come to the aid
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:10; to come to the aid
Go to your happy place  blah:100; to come to the aid
Go to your happy place  blah:4321; to come to the aid
Go to your happy place  blah:4321; to come to the aid
Now is the time for all blah:4321; to come to the aid
Now is the time for all blah:9876; to come to the aid
Now is the time for all blah:108636; to come to the aid
Now is the time for all blah:1194996; to come to the aid

질문: "is the"가 포함된 행에서 모든 고유 번호를 추출하는 방법은 무엇입니까?

'를 사용해 보았 grep -o -P -u '(?<=blah:).*(?=;)으나 세미콜론이 마음에 들지 않습니다.

답변1

\K방금 일치한 내용을 잊어버리기 위한 지침을 찾고 있습니다 .

grep -oP 'is the.*?blah:\K\d+'

그 다음에sort -u

답변2

사용 sed:

$ sed -n '/is the/s/^.*blah:\([0-9]*\);.*$/\1/p' file | sort -u
1
10
108636
1194996
4321
9876

is the바꾸기는 문자열을 포함하는 모든 줄의 내용을 와 사이의 숫자로 바꿉니다 . 이 문자열을 포함하지 않는 줄은 무시됩니다.blah:;

답변3

cat file | grep "is the" | awk -F':' '{print $2}'|awk -F';' '{print $1}'|sort -u

답변4

이 시도:

grep "is the" file | sed 's/.*blah://;s/;.*//' | sort -u

설명하다:

  1. grepis the행의 어느 부분에서든 " "이 있는 모든 행을 가져옵니다 .
  2. sed:" " 앞과 " " 뒤의 ;모든 항목을 제거합니다 . ( sed -e 's/.*blah://' -e 's/;.*//'이해를 돕기 위해 이를 사용할 수 있습니다.)
  3. sort정렬 라인

관련 정보