sedの単一コマンドと入力値を異なる形式で2回使用する

sedの単一コマンドと入力値を異なる形式で2回使用する

マイファイルの入力値の形式は次のとおりですinput-prefix:value

input-prefix2回別の代替項目に置き換えて、同様のコマンドに渡す必要がありますmy-command replace1-prefix:value replace2-prefix:value。単一のコマンドでこれを達成できますか?それともスクリプトを書く必要がありますか?

値がある限り非常に簡単です。

cat my-input-file | sed 's/input-prefix/replace1-prefix/' | xargs -r my-command

TIAサポートが必要な場合は、

W.

答え1

パターンの一部をグループ化して\(\)参照することができます\1(または\2パターンにさらに多くのグループがある場合)。\9

s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/

答え2

また、シンプルで複数の値があります。まず、パイプからcatコマンドをスキップできます。 sedがファイルから読み込み、その出力をSTDOUT。コマンドを実行するには、xargsコマンドからechoを削除するだけです。呼び出されるコマンドを表示するには、引数を追加してコマンドを表示したり、コマンドを対話的に実行したりできます。したがって、コマンドを実行する前にはい/いいえを指定する必要があります。sed\1-t-p

user@pc:/tmp$ cat inputfile.txt 
input-prefix1:value1
input-prefix:value
input-prefix2:value2

user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt
input-prefix1:value1
replace1-prefix:value
replace2-prefix:value
input-prefix2:value2 

user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt | xargs -r echo my-command

簡単な説明:入力プレフィックスが置き換えたい行の最初の項目であり、値がコロンの後の残りの行の両方であると仮定します。また、コマンドgの修飾子がsed置き換えられます。input-prefix:inputfile.txt

関連情報