複数の単語の変更を使用する方法はsed
?たとえば、次の内容のプレーンテキストファイルがあります。
Var_A = 1
Var_B = 2
Var_C = 3
生成されたファイルが次のように、およびを1
変更2
するにはどうすればよいですか?3
AAA
BBB
CCC
Var_A = AAA
Var_B = BBB
Var_C = CCC
私はこれを使ってみました。
sed -i 's/Var_A = 1\nVar_B = 2\nVar_C = 3/Var_A = AAA\nVar_B = BBB\nVar_C = CCC' file.txt
しかし、まったく動作しません。
答え1
sed
代替テキストの使用方法に関する基本的なテストケースを探しているようです。あなたの場合は、次のコマンドを使用することをお勧めします。
sed -e '/^Var_A/s/1/AAA/' -e '/^Var_B/s/2/BBB/' -e '/^Var_B/s/3/CCC/' file.txt
これは、3つの「ターゲット」代替コマンドを適用して行がで始まるかどうかを確認しVar_A
、そうであればで置き換えます1
(AAA
など)。
答え2
次のようなものを探しているかどうかを見てみましょう。
# define the replacement variables
$ a='AAA';b='BBB';c='CCC'
# make each replacement using the variables.
$ sed -e "s/^\(Var_A = \).*$/\1$a/" -e "s/^\(Var_B = \).*$/\1$b/" -e "s/^\(Var_C = \).*$/\1$c/" foo.txt
Var_A = AAA
Var_B = BBB
Var_C = CCC
目的sed
はテキストを1行ずつ処理することであるため、新しい行を一致させようとするのは一般的ではないか、少なくとも良い考えです。
答え3
それが何であるかを調べようとしないで、文字通り質問を受け入れます。実際に起こる:
$ cut -d ' ' -f -2 file | paste -d ' ' - <( printf '%s\n' AAA BBB CCC )
Var_A = AAA
Var_B = BBB
Var_C = CCC
これにより、元のファイルからusingシンボルの後ろの値が削除され、cut
usingprintf
によって生成された新しい値が追加されますpaste
。
使用sed
(printf
およびおよびpaste
):
printf '%s\n' AAA BBB CCC | paste -d @ file - | sed 's/\(= \).*@/\1/'
これにより、完全なソースファイルと新しいデータが作成され、@
次のように2つのデータセットが文字で区切られて並んで表示されます。
Var_A = 1@AAA
Var_B = 2@BBB
Var_C = 3@CCC
sed
その後、各行間=
の@
すべての内容を置き換えるために使用されます=
。
答え4
配列を使用するには、次のソリューションを使用できます。
$ v=([1]=AAA BBB CCC)
$ cat <<. | sed -e "s/1/${v[1]}/
> s/2/${v[2]}/
> s/3/${v[3]}/"
> Var_A = 1
> Var_B = 2
> Var_C = 3
> .
Var_A = AAA
Var_B = BBB
Var_C = CCC
検索部分を目的の変数に変更して置き換えることができます。