最後のコマンドの出力を引数としてsedに渡す

最後のコマンドの出力を引数としてsedに渡す

基本的に、xorg.conf の適切な場所に何かを追加する作業を自動化したいのですが、操作したい行の行番号を取得するためにいくつかのコマンドを使用しましたが、この行番号 (操作対象ではなく引数として) を sed に渡す方法がわかりません。xargs について教えてもらい、そのドキュメントも見ましたが、いくつか読んで実験してみたのですが、うまく動作しないようです。

誰かがもっと良い方法を思いついた場合に備えて、私が自動化したいプロセスは、「Identifier」と「Monitor0」(1つだけ)の両方を含む行を見つけて、その下に行を追加することです。Monitor0を見つけてその行を操作するだけでは、複数Monitor0 が入った行。

ここまで来ました:

fgrep -n "Monitor0" </etc/X11/xorg.conf | fgrep "Identifier" | cut -f1 -d:

これにより、sed に渡したい行番号が提供されますが、その方法がわかりません。

...それとも、私が気づいていないもっと簡単な方法があるのでしょうか?

答え1

これを Perl スクリプトで実行するためのフレームワークは思いつきますが、sed の経験がないので、詳細の核心を理解する必要があります。

最初に追加する必要がある行 (行番号ではありません) を識別する perl スクリプトを作成します。 (次のようなもの: $line = system("fgrep -n ..."); ) 次に、次のように sed を実行しますsed s/$line/$line.'\n'.$linetoadd/ <$oldfile >$newfile

答え2

解決しました (SynIRC の #cogs に感謝します)。この特定の問題に対する解決策は次のとおりです。

sed '/\bIdentifier\b.*\bMonitor0\b/ a\\tOption "NoDDC"'

関連情報