0

Webページをスクレイピングしてコンテンツの行を画面に表示する簡単なスクリプトがあり、それをgrepにパイプして必要なものを出力し、それをlessにパイプします。

myscript.rb scrape-term | grep argument | less

コマンドラインに追加の引数を指定する代わりに、次のようにスクリプトを変更しました。

%x[ #{my-text-output} | grep argument | less ]

しかし、今はエラーが発生します。

sh: 0: command not found

ここにある他のバリアントを試しましたが、何も機能しません!

4

2 に答える 2

0

あなたがする必要があるのはgrep、出力をそこに詰め込むのではなく、へのハンドルを開くことです。ハックの解決策は、出力を一時ファイルにダンプし、そこから読み取ることですgrepが、実際には混乱しています。

理想的には、フィルタリングによってパターンに一致する出力のみを発行することです。

while (...)
  # ...

  if (output.match(/#{argument}/))
    puts argument
  end
end

その後、必要に応じてこれを に送ることができますless

grepRuby の内部には、Array 内のすべてのものに対するメソッドもあることに注意してください。たとえば、次outputの行で呼び出される配列を作成した場合:

output.grep(/#{argument}/).each do |line|
  puts line
end
于 2012-09-04T16:40:39.253 に答える
-1

とにかくそれをシェルで実行するので、lessコマンドのために、多分これを試してください:

%x[ echo #{my-text-output} | grep argument | less ]

改行などとしてecho -e表示されることを試すこともできます。\n

(理想的には、テキスト\nの各行の終わりにすでに文字が含まれている必要があります。)

編集:

""変数を忘れました。私と一緒に働きたくないのですが、これ以上のUnknown Commandエラーはありません。less私は今このscript.rbを持っています:

text = "foo
foobar
foobaraski
bar
barski"

a = %x[ echo "#{text}" | grep foo]

print a

そしてそれは私に与えます:

shell> ruby script.rb 
foo
foobar
foobaraski

編集2:

そして今、それは機能します:

text = "foo
foobar
foobaraski
bar
barski"
system "echo '#{text}' | grep foo | less"

bashコマンドと同じように、3行で開く回数が少なくなります。

于 2012-09-04T16:46:09.833 に答える