複数のファイルを一致させるときのgrep出力フォーマット

複数のファイルを一致させるときのgrep出力フォーマット

複数のファイルを検索する場合、grepの出力は次のようになります。

{FILE}:{MATCH}

{FILE}セクションをダブルクリックすると、少なくともセクションと:いくつかの一致も選択(およびコピー)されるため、これが問題になります。 grepに出力形式を次のように指定させるにはどうすればよいですか?

{FILE} : {MATCH}

デフォルトでは、列の前にスペースを挿入したいと思います。 (後者のオプションはオプションです)

答え1

grep -T7/8勤務可能です。

% for f in a ab abc abcd abcde abcdef abcdefg abcdefgh; do echo pattern > $f; done
% grep -T pattern *
a      :pattern
ab     :pattern
abc    :pattern
abcd   :pattern
abcde  :pattern
abcdef :pattern
abcdefg:pattern
abcdefgh       :pattern

~からGNU grep マニュアル:

-T --initial-tab

タブの配置が正常に見えるように、実際の行の内容の最初の文字がタブの停止にあることを確認してください。これは、実際のコンテンツプレフィックスが付いた出力を持つオプションに役立ちます-H。単一ファイルの行がすべて同じ列で始まる可能性を高めるために、行番号とバイトオフセット(存在する場合)は最小サイズフィールド幅で印刷されます。-n-b

答え2

grep私が知る限り、このことは一人ではできません。ファイル名:に次のものがないとします。

grep ... | sed 's/:/ : /'

最初のものだけ:が埋められます。

もちろん、grepファイル名だけを印刷することもできます。

grep -l ...

答え3

何を構成する言葉ダブルクリックの選択に関する限り、端末(および/またはXツールキット)によって異なり、一部の端末ではカスタマイズできます。

のためにxtermキャラクターは次のように構成されます。フレンドリー(文字、スペース...)を選択してダブルクリックすると、同じカテゴリの隣接する文字を選択できます。

基本説明そこ。基本的に:はいいいえそれ自体と同じカテゴリに属します/が、文字や数字と同じカテゴリに属しません。

一部のシステムでは、以下を提供してデフォルト値を変更します。リソースxterm好きなら/etc/X11/app-defaults/XTerm

Linux Mintシステムで次のことがわかりました。

! Here is a pattern that is useful for double-clicking on a URL:
*charClass: 33:48,35:48,37-38:48,43-47:48,58:48,61:48,63-64:48,95:48,126:48

これにより、文字58(:)と47が文字と数字(48)と同じカテゴリに入ります。

あなたができることは、:自分のリソースファイルを介して自分のクラスに残るように変更することです。

たとえば、次を追加すると:

XTerm*charClass: 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

あなたの~/".Xdefaults-$(uname -n)"ファイル名をダブルクリックすると:

以下を試してみてください。

xterm -cc 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

3回または4回クリックすると、正規表現でさまざまな選択方法を定義できます。例えば

XTerm*on3Clicks: regex [^:]+

コロンではなく一連の文字を選択します三振

答え4

これは、grep入力ファイルごとに新しいプロセスが作成されるため、非常に非効率的ですが、次のようになります。

ファイルのリスト(例*:)が与えられたら、次を実行します。

fの場合ファイル一覧
する
    grep --label="$f" --with-ファイル名模様<"$f"
完璧

--label=string実際、「標準入力を読み取るとき、入力ファイル名はstring」と見なされます。  --with-filename-H短く)は、「一致する各ファイル名を印刷します」は、検索するファイルが複数ある場合のデフォルト値です。 IMNSHO、指定するとデフォルトでオンになっているはずです--labelが、動作する方法ではないようです。私のコード(上記)では、パラメータのファイル名にスペースを追加するので、--label結果は次のようになります。

ファイル名:ラインマッチングモード

ファイル名がから来た場合は、find次のようにします。

探す(パス...)(表現)-exec sh -c 'grep --label="$1" -H模様< "$1"' sh {} ";"

関連情報