티켓번호만 인쇄하려면 어떻게 해야 하나요?

티켓번호만 인쇄하려면 어떻게 해야 하나요?

아래는 파일 내용인데, "[]"에 들어있는 티켓번호만 출력하면 됩니다. sed 및 grep 명령을 사용하여 이 작업을 수행할 수 있는지 알고 싶습니다.

[request://Problem/26727777] SSO Components (UAT)
[request://Problem/25709048] [SERVER-SETUP] Setup 14xMDN, 10xPRN 
[request://Problem/26716590] Logs not populated properly from all servers
[request://Problem/23995808] Prod: Create requestmary

출력은 다음과 같아야 합니다.

26727777
25709048
26716590
23995808

시도했지만 sed -e 's/[^0-9]//g' ticket | sed '/^$/d'원하는 결과를 얻을 수 없었습니다. 행에 다른 숫자 값도 포함되어 있으므로 티켓 번호만 확인하면 됩니다.

226829515211
226855182
2268555334
226819615
226781310
226853999
226828948216

답변1

GNU를 사용할 수 있습니다 grep.

$ grep -oP '/\K\d+(?=])' ticket 
26727777
25709048
26716590
23995808

또는 sed:

sed -E 's#.*/([0-9]*).*#\1#g' ticket
26727777
25709048
26716590
23995808

위의 두 가지 모두 제공한 예제에서는 작동하지만 실제 파일에서 작동하는지 여부는 파일의 다른 줄에 따라 다릅니다. a 뒤의 모든 숫자 /, 예를 들어 grepa 앞의 모든 숫자를 인쇄합니다 ]. 이러한 기준과 일치하는 다른 줄이 있는 경우 전체 파일을 보여주셔야 합니다.

답변2

개인적으로 저는 Perl을 사용하겠습니다.

perl -lne 'print /(\d+)\]/'

이 작업을 수행해야 합니다.

-l"Tangle line break"라고 말하면 자동으로 줄에서 제거되고 각 print.

-n'루프에 넣습니다 while (<>) {. STDIN(또는 파일)을 한 줄씩 반복합니다 grep.

-e따옴표로 묶인 명령을 실행하는 "표현식"(또는 "실행")입니다 . (그렇지 않으면 perl프로그램을 읽어 보십시오 STDIN.)

우리는 정규식의 기본 일치 항목이 $_(이 경우 현재 줄)이라는 사실을 사용합니다.

캡처 그룹을 지정했기 때문에 "true" 또는 "false"를 반환하는 대신 캡처된 값의 (단일 요소) 목록을 반환합니다.

\d+하나 이상의 숫자입니다. (이것은 "고급" 정규식으로 와 대략 비슷 하지만 라틴어가 아닌 숫자를 사용하는 경우 다르게 작동합니다.) 그 뒤에 하나를 추가 [0-9]+해야 합니다 .]

그리고 왜냐하면 우리는아니요g정규식 끝에 사용되며 한 줄에 한 번만 일치합니다.

답변3

sed 's/[^0-9]*\([0-9]*\).*/\1/'

하지만 티켓 번호의 너비가 고정되어 있으면 를 사용하는 것이 좋습니다 cut.

편집: grep 사용: grep -o '^\[[^0-9]*[0-9]*' | grep -o '[0-9]*'

답변4

tr "\[\]/" " "| awk '/request/ {  print $3 }'

관련 정보