ファイル ( file1.txt
) には/path1/|value1
、(パスの後に値が続く) があります。その (一意の) パスを含む行を見つけて、値を変更する必要があります。したがって、行は次のようになります/path1/|value2
。
問題は/path1/
、value1
とのvalue2
部分が両方とも変数内に含まれていることです。
変数を使用しない場合は、使用できます (このページのおかげで):
sed '/path1/s/value1/value2/g' file1.txt > copyfile1.txt
(これにより、元のファイルのコピーが作成され、後で を使用して元のファイルを上書きできますmv
。)
これは を検索しているだけですpath1
。検索する/path1/
には、次を使用できます。
sed '/\/path1\//s/value1/value2/g' file1.txt > copyfile1.txt
部分文字列の抽出に関するこの質問への回答を使用して/path1/
、、value1
およびvalue2
部分を変数に入れることができます。
だから私の現在のコードは次のとおりです。
sed '/'"${PATH}"'/s/'"${PREVIOUS_VALUE}"'/'"${NEW_VALUE}"'/g' file1.txt > copyfile1.txt
しかし、PATH 変数にスラッシュが含まれているため、これは機能しません。hereの情報を使用して、最初に次のような置換を試みました。
FORMATTED_PATH=$(echo "${PATH}" | sed 's/\//\/\//g')
最初に、FORMATTED_PATH
代わりに使用されますPATH
が、検索と置換は機能しません (エラー メッセージは表示されず、新しいファイルは空です)。そしてロギングFORMATTED_PATH = //path1//
で(これは正しいと思います)。
スラッシュを含む変数を使用して、この検索と置換を行うにはどうすればよいですか?
(この回答で、一重引用符を閉じ、変数を二重引用符で囲んでから、一重引用符を再度開く必要があることがわかりました。しかし、これはスラッシュでは役に立ちません。)