質問編集履歴

2

先頭に「/var/log/maillog:」が付く件、解決致しました。

2017/12/07 04:28

投稿

teketeke
teketeke

スコア46

test CHANGED
File without changes
test CHANGED
@@ -139,3 +139,9 @@
139
139
  ```
140
140
 
141
141
  どのようにすれば先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列を削除できるでしょうか。
142
+
143
+
144
+
145
+ ■追記2
146
+
147
+ grep の部分で-hを付けることで先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列が出力されなくなりました。

1

回答などを参考にスクリプトを作成しましたが、ファイルに書き出される先頭に「/var/log/maillog:」が付いてしまいこれの削除ができていません。

2017/12/07 04:28

投稿

teketeke
teketeke

スコア46

test CHANGED
File without changes
test CHANGED
@@ -44,6 +44,98 @@
44
44
 
45
45
 
46
46
 
47
+ ■追記1、頂いた回答などを参考に自分なりにスクリプトを作ってみました。
48
+
49
+ ```bash
50
+
51
+ #!/bin/bash
52
+
53
+
54
+
55
+ file_path="/tmp/test-maillog1.txt"
56
+
57
+
58
+
59
+ #ファイルがあれば削除
60
+
61
+ if [ -e ${file_path} ]; then
62
+
63
+ rm -f ${file_path}
64
+
65
+ fi
66
+
67
+
68
+
69
+ #引数なければエラー
70
+
71
+ if [ "$1" = "" ]
72
+
73
+ then
74
+
75
+ echo "no argument"
76
+
77
+ exit 1
78
+
79
+ fi
80
+
81
+
82
+
83
+ start=${1}
84
+
85
+ end=0
86
+
87
+ while [[ $start -ge $end ]]; do
88
+
89
+
90
+
91
+ if [ $start -eq 0 ]; then
92
+
93
+ grep "`LANG=C date -u +"%c" | sed -e 's/^....//g' | sed -e 's/[0-9][0-9][0-9][0-9]//g' | sed -e 's/:[0-9][0-9]:[0-9][0-9] //g'`" /var/log/maillog* >> ${file_path}
94
+
95
+ break
96
+
97
+ else
98
+
99
+ dateform=`LANG=C date -u -d "${start} hours ago" +"%c"`
100
+
101
+ grep "`LANG=C date -u -d "${start} hours ago" +"%c" | sed -e 's/^....//g' | sed -e 's/[0-9][0-9][0-9][0-9]//g' | sed -e 's/:[0-9][0-9]:[0-9][0-9] //g'`" /var/log/maillog* >> ${file_path}
102
+
103
+ fi
104
+
105
+ start=$(($start-1))
106
+
107
+ done
108
+
109
+ ```
110
+
111
+
112
+
47
113
  ###試したこと
48
114
 
49
115
  今のところは「grep Dec 5」「grep Dec 6」の結果のmaillogをローカルに持ってきて、取得期間から開始と終了の時間のログまでを手動で切りとっています。
116
+
117
+
118
+
119
+ ■追記1
120
+
121
+ スクリプトを作成してみましたが、これだとファイルにまたがっていてもログが取れるのですが、先頭に「/var/log/maillog:」が付きます。
122
+
123
+ ```
124
+
125
+ /var/log/maillog:Dec 7 03:54:13 ip-xx-xx-xx-xx postfix/qmgr[12345]: xxxxxxxxx: removed
126
+
127
+ ```
128
+
129
+ ログファイル名は「maillog」「maillog-20171203」のようになっているのですが、削除しようとしてsedの正規表現で引っかけて削除しようとしましたが、削除できませんでした。
130
+
131
+ ```bash
132
+
133
+ cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]{8})://'
134
+
135
+ cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]{8})://'
136
+
137
+ cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]\{8\})://'
138
+
139
+ ```
140
+
141
+ どのようにすれば先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列を削除できるでしょうか。