teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2017/12/07 04:28

投稿

teketeke
teketeke

スコア46

title CHANGED
File without changes
body CHANGED
@@ -68,4 +68,7 @@
68
68
  cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]{8})://'
69
69
  cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]\{8\})://'
70
70
  ```
71
- どのようにすれば先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列を削除できるでしょうか。
71
+ どのようにすれば先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列を削除できるでしょうか。
72
+
73
+ ■追記2
74
+ grep の部分で-hを付けることで先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列が出力されなくなりました。

1

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

2017/12/07 04:28

投稿

teketeke
teketeke

スコア46

title CHANGED
File without changes
body CHANGED
@@ -21,5 +21,51 @@
21
21
  grep "Dec 6" /var/log/maillog > /tmp/maillog2
22
22
  ```
23
23
 
24
+ ■追記1、頂いた回答などを参考に自分なりにスクリプトを作ってみました。
25
+ ```bash
26
+ #!/bin/bash
27
+
28
+ file_path="/tmp/test-maillog1.txt"
29
+
30
+ #ファイルがあれば削除
31
+ if [ -e ${file_path} ]; then
32
+ rm -f ${file_path}
33
+ fi
34
+
35
+ #引数なければエラー
36
+ if [ "$1" = "" ]
37
+ then
38
+ echo "no argument"
39
+ exit 1
40
+ fi
41
+
42
+ start=${1}
43
+ end=0
44
+ while [[ $start -ge $end ]]; do
45
+
46
+ if [ $start -eq 0 ]; then
47
+ 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}
48
+ break
49
+ else
50
+ dateform=`LANG=C date -u -d "${start} hours ago" +"%c"`
51
+ 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}
52
+ fi
53
+ start=$(($start-1))
54
+ done
55
+ ```
56
+
24
57
  ###試したこと
25
- 今のところは「grep Dec 5」「grep Dec 6」の結果のmaillogをローカルに持ってきて、取得期間から開始と終了の時間のログまでを手動で切りとっています。
58
+ 今のところは「grep Dec 5」「grep Dec 6」の結果のmaillogをローカルに持ってきて、取得期間から開始と終了の時間のログまでを手動で切りとっています。
59
+
60
+ ■追記1
61
+ スクリプトを作成してみましたが、これだとファイルにまたがっていてもログが取れるのですが、先頭に「/var/log/maillog:」が付きます。
62
+ ```
63
+ /var/log/maillog:Dec 7 03:54:13 ip-xx-xx-xx-xx postfix/qmgr[12345]: xxxxxxxxx: removed
64
+ ```
65
+ ログファイル名は「maillog」「maillog-20171203」のようになっているのですが、削除しようとしてsedの正規表現で引っかけて削除しようとしましたが、削除できませんでした。
66
+ ```bash
67
+ cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]{8})://'
68
+ cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]{8})://'
69
+ cat /tmp/test-maillog1.txt | sed -e 's//var/log/maillog(-[0-9]\{8\})://'
70
+ ```
71
+ どのようにすれば先頭の「/var/log/maillog:」、「/var/log/maillog-yyyymmdd:」の文字列を削除できるでしょうか。