![이 특정 패턴을 사용하여 어떻게 파악하고 정렬할 수 있나요?](https://linux55.com/image/111598/%EC%9D%B4%20%ED%8A%B9%EC%A0%95%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%8C%8C%EC%95%85%ED%95%98%EA%B3%A0%20%EC%A0%95%EB%A0%AC%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
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