1

.bashrc の関数として使用したいコマンドがあります。

コマンドラインから

find . -name '*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color "string of words" ' \;

現在のディレクトリ内の任意の pdf で「単語の文字列」を検索します。

1時間の最高の部分にもかかわらず、「単語の文字列」を文字列変数として機能させることができません-つまり

eg="string of words"

find . -name '*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color $eg ' \;

これは明らかに機能しませんが、ハック、配列拡張"/'/\とのあらゆる種類の組み合わせを試しましたが、うまくいきませんでした。echo私はそれが可能だと確信しており、簡単だと確信していますが、それを機能させることはできません。

4

5 に答える 5

0

おそらく最も簡単に行うことができます:

find . -name '*.pdf' -exec \
  sh -c 'pdftotext $0 - | grep --with-filename --label=$0 --color "$1"' {} "$eg" \;
于 2013-10-21T23:52:22.573 に答える
0

これまでとは少し異なる方法でロジックを装飾する必要があります。

eg="string of words"
find . -name '*.pdf' -exec sh -c "pdftotext {} - | \
   grep -H --label={} --color '$eg'" \;

つまり、シェル プロセスをアウター クォート デリミタ"にすることで、シェル変数の展開が機能し、検索変数を で区切ると'文字列として保存されます。

于 2013-10-22T00:41:17.297 に答える
0

小さなシェル スクリプトmypdfgrepを作成し、次のように呼び出しますfind

#/bin/bash

pdftotext "$1" - | grep --with-filename --label "$1" --color "$2"

次に実行します

$ chmod +x mypdfgrep
$ find . -name '*.pdf' -execdir /full/path/to/mypdfgrep '{}' "string of words" \;
于 2013-10-22T13:26:48.717 に答える
0

変数展開などは、単一引用符ではなく、二重引用符内でのみ機能します。そのリングで二重引用符を使用してみましたか?

そのようです:

find . -name "*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color $eg " \;
于 2013-10-21T23:45:55.803 に答える
0

問題はおそらく、コマンドを一重引用符'で囲んでいることです。pdftotext一重引用符は、それらが発生する文字列内の変数展開を防ぎます。二重引用符を使用すると、よりうまくいく可能性があります"

eg="string of words"

find . -name '*.pdf' -exec sh -c "pdftotext {} - | grep --with-filename --label={} --color $eg " \;
于 2013-10-21T23:47:05.200 に答える