行間のパターンを一致させた後、テキストを挿入する必要があります。
core: [dev][delta3=deltafile;delta3dir=755|workpm][staging=stageingfile]
Expected output is:
core: [dev][delta3=deltafile;delta3dir=755|workpm][delta6=delta6file;delta6Dir=755|workpm][staging=stageingfile]
今私が試したことは次のとおりです。しかし、期待どおりに動作しません。
sed -i 's/\<[delta3=deltafile;delta3dir=755|workpm]\>/& [delta6=delta6file;delta6Dir=755|workpm]/' file.txt
これによりファイルが編集されますが、[delta6...]エントリが突然追加されます。
File data is like: asdasdasdad B-L-D-V-E-R
output is showing: asdadasdadd B-L-D-[delta6=delta6file;delta6Dir=755|workpm] -V-E-R
ベストアンサー1
エスケープ|
と開くかっこ[
は正規表現の特殊文字なので必要です。
また、不要\<
で問題を引き起こす可能性のある単語境界マッチングを使用しています。\>
しかし、私にはまだ動作しますsed -E
(まだなぜそうなのかわかりません...)。
sed -Ei 's/\[delta3=deltafile;delta3dir=755\|workpm]/&[delta6=delta6file;delta6Dir=755|workpm]/' file.txt
または逆参照をsed
サポートしていない場合&
:
sed -Ei 's/(\[delta3=deltafile;delta3dir=755\|workpm])/\1[delta6=delta6file;delta6Dir=755|workpm]/' file.txt
出力:
$ echo "core: [dev][delta3=deltafile;delta3dir=755|workpm][staging=stageingfile]" \
| sed -E 's/\[delta3=deltafile;delta3dir=755\|workpm]/&[delta6=delta6file;delta6Dir=755|workpm]/'
core: [dev][delta3=deltafile;delta3dir=755|workpm][delta6=delta6file;delta6Dir=755|workpm][staging=stageingfile]