複数のファイルで一致する場合の 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

正規表現として、トリプルクリックまたはクアッドクリック時の異なる選択方法を定義することもできます。例えば

XTerm*on3Clicks: regex [^:]+

コロン以外の文字のシーケンスを選択しますトリプルクリック

答え4

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

ファイルのリスト(例:*)が与えられた場合、

f のファイルリスト
する
    grep --label="$f " --with-filenameパターン< "$f"
終わり

--label=stringは、実質的には「標準入力を読み込むときに、入力ファイル名が であると仮定するstring」という意味です。  --with-filename(-H略して) は、「一致するファイル名をそれぞれ出力します」という意味です。これは、検索するファイルが複数ある場合のデフォルトです。IMNSHO では、 を指定した場合もデフォルトでオンになっているはずです--labelが、そのようには動作していないようです。私のコード (上記) では、 の引数のファイル名にスペースが追加されているため--label、次のような出力が得られます。

ファイル名:行マッチングパターン

ファイル名が から来ている場合はfind

探す(パス…) (式)-exec sh -c 'grep --label="$1 " -Hパターン< "$1"' sh {} ";"

関連情報