echo Hello World | nano - | less
テキストエディタでHello-> Goodbyeを変更したい。
Nanoである必要はありません。私はnano読み取りstdinで立ち往生していますが、ファイルに書き込む必要があります(-に書き込むと-という名前のファイルが作成されます)
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
コマンドは、基本的にこれらすべてを処理します。これは素晴らしいですが、コマンドがデフォルトで使用できることはめったにありません。
テキストエディタjoe(別名 Joe's Own Editor )はあなたが望むことをします。
コマンド echo "hello world" | joe - | less
は期待どおりに機能しますが、何らかの理由で引用符が必要です。
一部のコマンド(gpgなど)は、パイプに入らない表示出力を生成します。これにより、joe内の初期表示が破損しますが、ctrl+rを押すと--refresh--クリーンアップします。
「Hello」を「Goodbye」(またはその他のWordの置換)に置き換えるだけの場合は、エディターでの手動編集を回避して、自動検索および置換ツールを使用できます。たとえば、「sed」は次のような置換を行うことができます。
echo Hello World | sed 's/Hello/Goodbye/' | less
詳細については、「mansed」を確認してください。