명령을 실행할 때 받는 메시지 번호를 추출하고 싶습니다 mailx -H
. 읽지 않은 메시지와 새 메시지의 메시지 번호만 원합니다. 다음 명령을 사용해 보았습니다.
mailx -H|grep '^ [UN]'|cut -c 3-
그러나 원하는 출력을 제공하지 않습니다. U 또는 N 다음에 전체 줄을 제공합니다. mailx -H 명령의 출력 예는 다음과 같습니다.
O 95 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
O 96 efgh Thu Sep 6 20:29 25/1245 Incident: 00291
O 97 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
O 98 pqrs Thu Sep 6 20:29 25/1245 Incident: 00291
O 99 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
U100 cnhn Thu Sep 6 20:29 25/1244 Incident: 00291
U101 gont Thu Sep 6 20:29 25/1244 Incident: 00291
U102 qwer Thu Sep 6 20:29 25/1244 Incident: 00291
U 또는 N 뒤의 숫자, 즉 새 메시지 또는 읽지 않은 메시지와 O(이전) 메시지를 원합니다. 쉘 스크립트에서 이를 어떻게 수행할 수 있습니까? 예상 출력은 다음과 같습니다.
95
96
97
98
99
100
101
102
답변1
이 시도,
mailx -H | nawk -F '[^0-9]+' '/^ [U|N]/ { print $2}'
[^0-9]+
FS로서.U
또는로 시작하는 줄 추출N
- 두 번째 필드 인쇄
답변2
이 시도 grep
:
grep -P -o '(?<=O|U|N) ?[0-9]+'
예:
echo "O 95 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
O 96 efgh Thu Sep 6 20:29 25/1245 Incident: 00291
O 97 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
O 98 pqrs Thu Sep 6 20:29 25/1245 Incident: 00291
O 99 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
U100 cnhn Thu Sep 6 20:29 25/1244 Incident: 00291
U101 gont Thu Sep 6 20:29 25/1244 Incident: 00291
U102 qwer Thu Sep 6 20:29 25/1244 Incident: 00291" | grep -P -o '(?<=O|U|N) ?[0-9]+'
95
96
97
98
99
100
101
102
-
grep --version
grep (GNU grep) 2.27
위의 방법이 효과가 없거나 충분하지 않은 경우 grep
다음을 시도해 보세요 sed
.
sed -E 's/^(O|U|N) ?([0-9]+) .*/\2/g'
예:
echo "O 95 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
O 96 efgh Thu Sep 6 20:29 25/1245 Incident: 00291
O 97 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
O 98 pqrs Thu Sep 6 20:29 25/1245 Incident: 00291
O 99 abcd Thu Sep 6 20:29 25/1245 Incident: 00291
U100 cnhn Thu Sep 6 20:29 25/1244 Incident: 00291
U101 gont Thu Sep 6 20:29 25/1244 Incident: 00291
U102 qwer Thu Sep 6 20:29 25/1244 Incident: 00291" | sed -E 's/^(O|U|N) ?([0-9]+) .*/\2/g'
95
96
97
98
99
100
101
102