如何用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

现在我希望能够通过信号的数量打印“11 SEGV”,“12 USR2”或“SEGV”,“USR2”(两种解决方案都可以) - 使用sed。

我这样做了/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

相关内容