web-dev-qa-db-ja.com

配管コマンド、stdin書き込みをstdoutに変更

echo Hello World | nano - | less

テキストエディタでHello-> Goodbyeを変更したい。

Nanoである必要はありません。私はnano読み取りstdinで立ち往生していますが、ファイルに書き込む必要があります(-に書き込むと-という名前のファイルが作成されます)

8
user65660

moreutils パッケージには、これを行うためのvipeという優れたコマンドがあります。マニュアルページから:

SYNOPSIS
       command1 | vipe | command2

DESCRIPTION
       vipe allows you to run your editor in the middle of a unix pipeline and
       edit the data that is being piped between programs. Your editor will have
       the full data being piped from command1 loaded into it, and when you close
       it, that data will be piped into command2.

デフォルトでは、これはeditorコマンドを使用します。これは通常、デフォルトのコマンドラインエディターへの単なるシンボリックリンクです。これを変更するには、リンクを変更するか(Debianベースのシステムではupdate-alternativesを使用)、またはEDITOR環境変数を使用します。たとえば、次のことができます。

echo Hello World | EDITOR=nano vipe | less

そうでなければ、特定のテキストエディタがこの種のことをサポートしていない場合は、一時ファイルを手動で作成し、そこにファイルを書き込み、エディタを実行し、パイプラインの残りの部分にファイルを入力し、一時ファイルを削除します。 vipeコマンドは、基本的にこれらすべてを処理します。これは素晴らしいですが、コマンドがデフォルトで使用できることはめったにありません。

11
Graeme

テキストエディタjoe(別名 Joe's Own Editor )はあなたが望むことをします。

コマンド echo "hello world" | joe - | lessは期待どおりに機能しますが、何らかの理由で引用符が必要です。

一部のコマンド(gpgなど)は、パイプに入らない表示出力を生成します。これにより、joe内の初期表示が破損しますが、ctrl+rを押すと--refresh--クリーンアップします。

1
Ben Tesch

「Hello」を「Goodbye」(またはその他のWordの置換)に置き換えるだけの場合は、エディターでの手動編集を回避して、自動検索および置換ツールを使用できます。たとえば、「sed」は次のような置換を行うことができます。

echo Hello World | sed 's/Hello/Goodbye/' | less

詳細については、「mansed」を確認してください。

1
ElazarR