아래는 파일 내용인데, "[]"에 들어있는 티켓번호만 출력하면 됩니다. 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 뒤의 모든 숫자 /
, 예를 들어 grep
a 앞의 모든 숫자를 인쇄합니다 ]
. 이러한 기준과 일치하는 다른 줄이 있는 경우 전체 파일을 보여주셔야 합니다.
답변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 }'