sed가 예상 텍스트를 캡처하지 않습니다.

sed가 예상 텍스트를 캡처하지 않습니다.

특정 작업을 수행하기 위해 git filter 분기를 사용하고 있습니다. sed 명령을 사용합니다. 간단한 정규식을 사용하면 모든 것이 잘 작동하지만 더 복잡한 경우에는 작동하지 않습니다. 어쩌면 정규식이나 이스케이프 문자에 실수가 있을 수도 있습니다. 도와주세요.

git filter-branch -f --msg-filter 'sed -e "s/\[PEM-2233\] Merge branch 'master' of https:\/\/bitbucket\.test\.domain\.com\/rrr\/pem\/hello-world into feature\/PEM-2233-do-acceptance-tests/CHANGED/"' -- --all

내가 캡처하려는 커밋 메시지는 다음과 같습니다.

[PEM-2233] Merge branch 'master' of https://bitbucket.test.domain.com/rrr/pem/hello-world into feature/PEM-2233-do-acceptance-tests

답변1

문제는 주변의 작은따옴표입니다 'master'. 이 따옴표 중 첫 번째는 작은 따옴표로 시작하는 문자열을 끝냅니다 sed -e. 견적 자체는 에 전달되지 않습니다 sed.

이것은 질문에 해당합니다

$ echo '"hello 'user'"'
"hello user"

참조를 다음으로 변경합니다.

  • '\'master\''(이 문자열은 'master'쉘에서 인용되지 않은 문자열로 처리됩니다.) 또는
  • '"'master'"'(이 문자열은 'master'쉘에서 큰따옴표로 묶인 문자열로 처리됩니다).

게다가 그런 일이 일어나지 않도록기울어진 이쑤시개 증후군, 명령에 다른 구분 기호를 사용하십시오 s.

s#...#...#

답변2

작은따옴표는 중첩될 수 없습니다. 앞의 작은따옴표는 master뒤에 오는 인용문을 닫습니다 --msg-filter.

작은따옴표로 묶인 문자열 안에는 작은따옴표를 사용할 수 없으므로 문자열을 끝내고 따옴표를 올바르게 이스케이프 처리해야 합니다.

branch '\'master\'' of http

관련 정보