이 특정 패턴을 사용하여 어떻게 파악하고 정렬할 수 있나요?

이 특정 패턴을 사용하여 어떻게 파악하고 정렬할 수 있나요?

B* 이후의 숫자를 얻고 싶지만 포함하지 않음그리고 그 이후. 친구에게서 받은 다음 명령을 사용해 보았지만 작동하지 않습니다.

grep -oP 'B.\K[\w\s\d]' < tus.txt | sort -u

tus.txt

~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758895*4932764*B*4578873831221*Y*
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21759295*4932379*B*00082403*Y*2708332

원하는 결과:

222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403

답변1

입력은 *-로 구분됩니다. 다섯 번째 필드를 가져옵니다.

$ cut -d '*' -f 5 tus.txt
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403

이것은 귀하가 언급한 원하는 출력이지만 정렬에 대해서도 논의했습니다.

$ cut -d '*' -f 5 tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
262105589241-20172-31489016
36
4578873831221

어떤 이유로든 하고 싶다면원래이 필드의 데이터(중복은 여기서 제거되지 않음):

$ sort -t '*' -k5,5 tus.txt
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21759295*4932379*B*00082403*Y*2708332
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758895*4932764*B*4578873831221*Y*

답변2

*귀하의 명령도 작동합니다. 또는 다음을 추가해야 합니다 +.

$ grep -oP 'B.\K[\w\s\d]+' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221

또는 더 간단하게는 다음과 같습니다.

$ grep -oP 'B\*\K[^*]*' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221

또는 awk끝에서 두 번째로 구분된 필드를 인쇄 하려면 다음을 수행하십시오 *.

$ awk  -F'[*]' '{print $5}' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221

답변3

다음 방법을 사용하십시오.

grep -Po '(?<=\*B\*)[^*]+' tus.txt | sort -u

산출:

00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241-20172-31489016
36
4578873831221

초기 출력 은 sort -u재정렬됩니다.grep

관련 정보