関数でheredocを使用してgrep

関数でheredocを使用してgrep

端末に貼り付けたテキストを解析する関数を作成したいと思います。

$ cat <<eof | grep --color sometext
> foo
> sometext
> sometext1
> a sometext
> asdf
> 
> eof
sometext
sometext1
a sometext

上記の操作が機能している間は、エイリアスまたはその機能を作成できません。

alias gsi='cat <<eof | grep --color "$1"'
gsi { cat <<eof | grep --color "$1" ; }

関数定義時にリダイレクトが行われないようです。

答え1

alias 'gsi=<<eof grep --color'

置換がシェルコードとして解釈されるプリプロセッサテキスト置換と同じエイリアスとして機能することができます。

あなたのシステムはあなたがやった方法で動作しません"$1"gsi file.txtで置き換えられたcat <<eof | grep --color "$1" file.txtシェルはコマンドラインの解釈を行い、$1この時点であらかじめ実行しない限り、シェルの最初の位置引数は空にすることができますset something。だから"$1"ここで削除したいと思います。 UUOCを削除することもできます。

gsi() { cat <<eof | grep --color "$1" ; }

eof後ろの行が欠落しているため、構文的な観点から見ると間違っていますcat <<eof

答え2

あなたの関数は次の文書を使用しません。

gsi () {
   grep --color "$@"
}

grepこれにより、パブリックラインで他のオプションと一緒にパターンを渡し、grep標準入力から読み取ることができます。

を押すと、入力が終了したことを知らせますCtrl+D

上記の内容は、貼り付けた内容と結果が混在している場合がありますgrep。まず貼り付けた内容を集めてくださいそれから実行するには、grep次のものを使用できます。

gsi () {
    trap 'rm -f "$buffer"' RETURN
    local buffer="$(mktemp)"
    cat >"$buffer" && grep --color "$@" "$buffer"
}

grepここで貼り付けた出力は、実行される前に一時ファイルに保存されます。関数が終了すると、一時ファイルが削除されます。bashここに文書を貼り付けるときに後ろで起こるのがおおよそです。

答え3

ターミナルに貼り付けたいとおっしゃいました。 here-docを完全に廃棄し、適切なクリップボードユーティリティxclippbpasteMac OS Xの場合など)を使用してください。これがxclip完了します。

xclip -o -sel clip | grep --color 'sometext'

また、見ることができます"xclip"対"xsel"両方のユーティリティの違いについて。

関連情報