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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

grep

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Q&A

解決済

2回答

305閲覧

grepでテキストファイルへのリダイレクトができません

Tohmas_1010

総合スコア15

Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

grep

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

0グッド

0クリップ

投稿2024/08/29 09:37

編集2024/08/29 13:14

実現したいこと

以下のパターン1,2のコマンドは、Microsoft Edgeをログ記録モードで開いてその出力をリアルタイムでgrepでフィルタリングさせて test_log.txtにリダイレクトさせるものです。目的は、パターン2のコマンドでリダイレクト「>> test_log.txt」させることですが、以下のパターン別の動作説明にあるように機能しません。どなたかご教授いただけると助かります。

パターン別の動作

パターン2の動作:
リダイレクト「>> test_log.txt」を無しで実行した場合はターミナルにフィルタリングされたログが出力されるが、有りだとターミナルにもtxtにも出力されない。

パターン1の動作:
正常に動作する(>> test_log.txtが有りの場合と無しの場合共に)。

パターン1

zsh

1/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --enable-logging=stderr --v=1 2>&1 | grep -i -E "259.*VERBOSE1.*bing" >> test_log.txt

パターン2

zsh

1/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --enable-logging=stderr --v=1 2>&1 | grep -i -E "259.*VERBOSE1.*bing.com.*scheme" >> test_log.txt

環境

  • Macbook PRO
  • ブラウザ:Microsoft Edge

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

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

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

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

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

otn

2024/08/29 10:18

Chromium OSは使ったこと無いですが、「Chromium OS コマンドライン」で検索すると、crosh というのがヒットしました。Unix/Linuxで動くsh/bash等ではなく、OS独自のcroshのコマンドラインで直接キーインしていると言うことで合っていますか?
Tohmas_1010

2024/08/29 12:17

すみません、Microsoft EdgeがChroniumをもとに作られているということでChroniumタグを使いました。Macのターミナルでパターン1,2のコマンドを使っています。
otn

2024/08/29 12:40

Chromium OSというのは、WindowsとかMaxOSとかの横並びのまた別のOSの名前なので、MacOSともEdgeとも何の関係もありません。タグを削除しましょう。
guest

回答2

0

Chromium OSでなく、MacOSだと普通のシェル(おそらくzsh)ですね。
出力もなく、エラーも無いなら、該当の行がないのでしょう。

sh

1/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --enable-logging=stderr --v=1 2>&1 | 2tee test_all_log.txt | 3grep -i -E "259.*VERBOSE1.*bing.com.*scheme" >> test_log.txt

で、grepでセレクトする前のログが、test_all_log.txtに書かれるので、中味を見てみましょう。

teeというのはパイプを流れるデータをファイルに書くコマンドです。T字型の分岐水道管みたいな意味)

投稿2024/08/29 13:04

otn

総合スコア85766

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

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

Tohmas_1010

2024/08/29 14:40

回答ありがとうございます。int32_tさんの方法で解決しましたm(_ _)m
guest

0

ベストアンサー

確証はありませんが、grep--line-buffered フラグを付けると解決するかもしれません。

投稿2024/08/29 12:41

int32_t

総合スコア21599

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

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

otn

2024/08/29 13:16 編集

なるほど。もし grepコマンドが終了せず、動き続けているなら、これでしょうね。 私の回答は、grep が終了済みが前提です。 そうか。実行中だとすると、つじつまが合いますね。
Tohmas_1010

2024/08/29 14:38

ありがとうございます!解決しました1 一定量のデータを受け取るまで出力しないというgrepの仕様が問題で、それに対する策として--line-bufferedを使って一行ごとにデータを処理できるようにした、という解釈で正しいでしょうか?
int32_t

2024/08/30 03:35 編集

だいたい合ってますが、「一定量のデータを受け取るまで」ではなく「grepの結果出力が一定量に溜まるまで」のようです。
otn

2024/08/30 05:36 編集

普通に標準出力に書いた場合(Cだとprintf等、stdoutに書く場合)、出力先が、①端末か、②ファイルか、③パイプ等かを実行時ライブラリが判断して、動作が変わります。 いずれの場合も、(a)出力のバッファが一杯になるか、(b)ファイルをclose()するか(プログラム終了時も含む)、(c)fflush()関数を呼ぶかすると出力されますが、バッファにまだ余裕がある場合はバッファに溜めるだけで出力しません。 バッファのサイズは環境によって違うし、プログラムで変更も出来ますが、一例では4KBか8KBとか(全くバッファリングしないという変更も可能)。 ①端末の場合・・・(a)(b)(c)以外に改行が含まれた場合にも出力をOSに依頼 ・・・なのでリダイレクトしないと早期に出力された ②③ファイル・パイプの場合・・・(a)(b)(c)の場合のみ出力をOSに依頼 grepは、「②③の場合でも改行があれば出力する」というニーズが高いので、専用のコマンドラインオプションが設けられています(昔は無かったが)。内部的には行単位でfflush()を呼ぶ相当をする。 そういう変更機能がないコマンドでバッファリング動作を変えたい時は stdbuf コマンドを使いますが、MacOSにもあるかどうか知りません。 バッファリングをするのは、「OSに対して読み書きを依頼する」という処理が重いためで、その回数を出来るだけ減らして実行時間や使用リソースを減らすためです。箱買いだと安い・手間が省けるみたいな。 OS自体がさらにバッファリングしているので、そのままHDD/SSDアクセス回数になるわけではないです。
Tohmas_1010

2024/08/31 09:48

詳しくありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問