
コマンドの実行時に受信したメッセージ番号を抽出したいと思います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番目のフィールドの印刷
答え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