質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

4回答

2882閲覧

ログファイルから任意の文字列を取得したい

s_akira

総合スコア15

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/08/09 10:16

編集2018/08/09 14:47

a.logファイルから特定の文字列だけ取得して新ファイルに出力させたいです。

a.logファイルの中身

<123>2018-08-01T08:59:59Z ct6149 log[999999]: 11.222.333.333 "-" "-" [01/2018:08:59:59 +0000] "GET /photo/9999.jpg HTTP/1.1" 200 157305 1234 "https://www.you.net/03?t&pa=1" "Mozilla/1.0 (Win NT 10.0; AAA99; Trident/7.0; rv:11.0) like Goooo" <123>2018-08-01T08:59:59Z ch1722 log[885560]: 33.444.555.666 "-" "-" [01/2018:08:59:59 +0000] "GET /css/main.css HTTP/1.1" 304 "-" 127 "https://www.you.net/89999?t.snu.t" "Mozilla/2.0 (iPhone; CPU iPhone OS 99_9_9 like Mac OS X) AppleWebKit/999.9.99 (KHTML, like Gecko) Version/11.0 Mobile/99M999 Safari/600.1" <123>2018-08-01T09:00:00Z cd1878 log[121131]: 44.555.666.777 "-" "-" [01/2018:09:00:00 +0000] "GET /images/0001.jpg HTTP/1.1" 200 79906 1206 "https://www.you.net/L?&pa=4" "Mozilla/3.0 (Win NT 9.1; Trident/7.0; rv:99.0) like Gooo" <134>2018-08-01T09:04:28Z ct6666 log[222221]: 77.888.999.000 "-" "-" [01/2018:09:04:28 +0000] "POST /api/lan HTTP/1.1" 200 28 38571 "https://www.you.net/stay" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gooo"                                                                    ・                                                                    ・ 上記のような内容が1000行以上続く。。。

上記を下記のように、出力しなおしたい。
(GETからURLまでに出力し直したい。)

file

1"GET /photo/9999.jpg HTTP/1.1" 200 157305 1234 "https://www.you.net/03?t&pa=1" 2"GET /css/main.css HTTP/1.1" 304 "-" 127 "https://www.you.net/89999?t.snu.t" 3"GET /images/0001.jpg HTTP/1.1" 200 79906 1206 "https://www.you.net/L?&pa=4" 4"POST /api/lan HTTP/1.1" 200 28 38571 "https://www.you.net/stay" 5                                                                   ・ 6                                                                   ・

以下、かきかけのコードです。

python

1path = "/div/a.log" 2 3# 行の出力 4with open(path) as f: 5 lines = f.readlines() 6 7lines_strip = [line.strip() for line in lines] 8 9for lines in lines_strip: 10 print(lines)

###参考URL
Pythonでファイル内の任意の文字列を含む行を抽出(grep的処理)
Pythonでgrepやawkのような行の抽出を行う
Pythonで文字列を分割

すみませんが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

grepもタグにあるので、grepで。Perl拡張(-Pオプション)が必要です。」

Shell

1grep -P -o '] \K".*?" \S+ \S+ \S+ ".*?"' 2とか 3grep -P -o '^(\S+ ){8}\K(\S+ ){7}'

投稿2018/08/09 11:52

otn

総合スコア84487

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_akira

2018/08/10 00:38

コマンドのご回答ありがとうございます。 コマンドでも実行したかったので助かりました。実際に試してみます。
guest

0

Python

1with open("a.log") as f: 2 for line in f.readlines(): 3 print(*line.split()[8:], sep=" ")

投稿2018/08/09 10:59

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_akira

2018/08/10 00:41

ご回答ありがとうございます。 参考にさせていただきます!
guest

0

ベストアンサー

雑ですがこんな感じで出せました。

>>> import re >>> for line in open("test.txt").readlines(): ... m = re.search("(\"GET .*http\S+)",line) ... if m: ... print(m.group(1)) ... "GET /photo/9999.jpg HTTP/1.1" 200 157305 1234 "https://www.you.net/03?t&pa=1" "GET /css/main.css HTTP/1.1" 304 "-" 127 "https://www.you.net/89999?t.snu.t" "GET /images/0001.jpg HTTP/1.1" 200 79906 1206 "https://www.you.net/L?&pa=4"

投稿2018/08/09 10:38

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_akira

2018/08/10 00:40

上記に参考に、出力を行いました。 ご回答ありがとうございました。
guest

0

log のフォーマット次第ですが、正規表現か区切り文字列を使用して対象を特定してやると良いです。
区切り文字列で対応可能であれば、それほど難しくは無いかと。

投稿2018/08/09 10:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_akira

2018/08/09 10:34

logのフォーマットですが、一番上に載せている形になります。 簡単な内容で質問してしまっているようでしたら申し訳ありません。
退会済みユーザー

退会済みユーザー

2018/08/09 13:12

> logのフォーマットですが、一番上に載せている形になります。 あれはフォーマットじゃなくてサンプル。 あれじゃ、POST もあるのでは?とか、例外として区切り文字が区切り以外の箇所で発生したりしない?とか確認できないです。 文字列の操作には、フォーマットと出力内容の正確な把握が必要となります。 まぁ、Apache のログだと思うので、先人の知見をさがすのが早い気もしますが。
s_akira

2018/08/09 14:49

確認したところ確かに、POSTがありました。 失礼いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問