マイファイルの入力値の形式は次のとおりですinput-prefix:value
。
input-prefix
2回別の代替項目に置き換えて、同様のコマンドに渡す必要があります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