sed를 사용하여 신호 이름을 추출하는 방법

sed를 사용하여 신호 이름을 추출하는 방법

/usr/bin/kill -L인쇄:

 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     6 IOT      7 BUS      8 FPE      9 KILL    10 USR1
11 SEGV    12 USR2    13 PIPE    14 ALRM    15 TERM    16 STKFLT  17 CHLD    17 CLD     18 CONT    19 STOP    20 TSTP
21 TTIN    22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH   29 IO      29 POLL    30 PWR
31 SYS     34 RTMIN   64 RTMAX

이제 sed를 사용하여 신호 수에 따라 "11 SEGV", "12 USR2" 또는 "SEGV", "USR2"를 인쇄할 수 있기를 원합니다(두 솔루션 모두 작동함).

저는 이렇게 했습니다 /usr/bin/kill -L|sed -n "s/\(^\| \)11 \([^ ]\+\)\+/<<\2>>/;s/.*<<\([^>]\+\)>>.*/\1/p". "SEGV"가 11로 출력됩니다.

그러나 문제는 두 번째 교체 없이 더 간단하게 수행할 수 있느냐는 것입니다.

답변1

할 수 있다달리기

/usr/bin/kill -L | grep -o '[0-9]\+ [A-Z0-9]\+'

개행문자로 신호를 분리하고 쉽게 grep사용하세요 grep -w "^$NUM".

또는 사용하기 더 쉽습니다 kill -l "$NUM";-)

$ kill -l 11
SEGV

관련 정보