シェルスクリプトで特定のパターンの後にファイルにテキストを挿入する方法は?

シェルスクリプトで特定のパターンの後にファイルにテキストを挿入する方法は?

行間のパターンを一致させた後、テキストを挿入する必要があります。

  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]

おすすめ記事