複数の単語を別の単語に置き換えるには、「sed」を使用します。

複数の単語を別の単語に置き換えるには、「sed」を使用します。

複数の単語の変更を使用する方法はsed?たとえば、次の内容のプレーンテキストファイルがあります。

Var_A = 1
Var_B = 2
Var_C = 3

生成されたファイルが次のように、およびを1変更2するにはどうすればよいですか?3AAABBBCCC

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、そうであればで置き換えます1AAAなど)。

答え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シンボルの後ろの値が削除され、cutusingprintfによって生成された新しい値が追加されますpaste


使用sedprintfおよびおよび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

検索部分を目的の変数に変更して置き換えることができます。

関連情報