次の形式の入力値を持つファイルがあります: 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 がファイルから読み取り、その出力を に印刷するためですSTDOUT
。sed
これは、@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