줄 사이의 패턴을 일치시킨 후 텍스트를 삽입해야 합니다.
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]