sed への単一コマンドで、入力値を異なる形式で 2 回使用します。

sed への単一コマンドで、入力値を異なる形式で 2 回使用します。

次の形式の入力値を持つファイルがあります: input-prefix:value

input-prefix異なる置換を 2 回実行して、 のようなコマンドに渡す必要がありますmy-command replace1-prefix:value replace2-prefix:value。これは 1 つのコマンドで可能ですか、それともスクリプト化する必要がありますか?

一つの価値でシンプルに

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

ご支援をいただければ幸いです。

W.

答え1

パターンの一部を でグループ化し\(\)、後で で参照することができます\1(パターン内に複数のグループがある場合は\2...で参照することもできます)。\9

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

答え2

複数の値を使用する場合も簡単です。まず、パイプ内の cat コマンドを省略できます。これは、sed がファイルから読み取り、その出力を に印刷するためですSTDOUTsedこれは、@Philippos が説明した方法で動作します (\1最初のキャプチャ グループに属しているため、2 回使用されます)。コマンドを実行するには、xargs コマンドの echo を削除するだけです。呼び出されたコマンドを確認する場合は、パラメーターを追加して-tコマンドを確認したり、-p対話的に実行したりできます。したがって、コマンドを実行する前に yes/no を指定する必要があります。

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すべての your の出現を置き換えます。input-prefix:inputfile.txt

関連情報