쉘 스크립트에서 특정 패턴 뒤에 파일에 텍스트를 삽입하는 방법은 무엇입니까?

쉘 스크립트에서 특정 패턴 뒤에 파일에 텍스트를 삽입하는 방법은 무엇입니까?

줄 사이의 패턴을 일치시킨 후 텍스트를 삽입해야 합니다.

  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]

관련 정보