4

ここでいくつかのUNIXシェルの基本が必要です:

に「-」ターゲットが表示されないコマンドの場合は、ed と言います。

print '%-2p\nq' | ed -s FILE

処理するデータとして、FILE 名ではなく、一部の cmd の stdout からストリームを提供できますか。

SomeCMD | ed -s SOMETHING_MAGICAL <<< 'print '%-2p\nq'

可能ですか?

4

2 に答える 2

10

edはstdinからコマンドを読み取るので、ファイルがstdinにもある場合、どのように機能しますか?

実際、出力を1行で連結すると、stdinを介してファイル入力をフィードできます

i

最初に、データへの書き込みを開始してから、単一のを追加します入力を終了し、その後に任意のコマンドを続けます。結果をstdoutに出力することもできます。ファイルに。が1つしかない行があると、壊れることを覚えておいてください初期化。

したがって、ファイルinput.fileにこれが含まれている場合:

First line
Second line
Third line

そして、ファイルcommands.listにはこれが含まれています:

.
1d
1,$w /dev/stdout

次に、このコマンドライン...

echo i | cat - input.file commands.list | ed -s

これを出力します:

Second line
Third line

あえてtadaaaaaと言います!?

注:おそらく、単一の場合から保護することができますそのような行をエスケープするフィルターを介してファイルをパイプ処理し、edコマンドを使用してそれらを再度エスケープ解除することにより、ファイル内の行。それはあなたの創意工夫に任せます。

別の注意:これには本当にsedを使用する必要がありますが、コメントを通過させることはできません。

于 2012-10-17T13:21:06.703 に答える
3

rコマンド出力をテキスト バッファに読み込むために使用します。だから、ポータブル:

printf '%s\n' 'r !df -h' g/tmpfs/d ,p q | ed -s

また

ed -s << IN
r !df -h
g/tmpfs/d
,p
q
IN

上記は の出力を読み取り、df -h一致する行を削除しtmpfsて結果を出力します。
シェルがプロセス置換をサポートしている場合:

printf '%s\n' g/tmpfs/d ,p q | ed -s <(df -h)

と呼ばれgnu edます。 ページに従って:SOMETHING_MAGICAL!
man

指定されている場合は、「ファイル」を読み取って編集を開始します。「ファイル」が「!」で始まる場合、シェル コマンドの出力を読み取ります。

printf '%s\n' g/tmpfs/d ,p q | ed -s '!df -h'

または、herestringを使用:

ed -s '!df -h' <<< $'g/tmpfs/d\n,p\nq\n'
于 2014-12-30T23:48:31.743 に答える