이걸 변환하려고 하는데
url = ssh://[email protected]/project/repo.git
도착하다
url = ssh://[email protected]/scm/project/repo.git
그러나 이는 단순한 sed
찾기 및 바꾸기가 아닙니다. \turl
문자열이 로 시작하고 포함하지 않는 경우 에만 찾기 및 바꾸기를 적용하고 싶습니다 scm
.
다음을 포함하는 행만 대체하는 시작 섹션이 있습니다.\turl
cat .git/config | sed "/\turl/ s=\.com\/=\.com\/scm\/=g"
scm
하지만 멱등성을 가지게 하기 위해 이미 문자열이 포함되어 있는지 확인할 수 없습니다 . 그렇지 않고 seds를 사용하여 명령을 계속 실행하면 -i
계속해서 scm
.
답변1
sed에서는 다음과 같이 작동합니다.
sed '/url/ { /scm/! s=\.com/=\.com/scm/=g }'
주소를 추가하여 무효화할 수 있으며 !
, 블록을 사용하여 주소 정규식을 다른 주소 정규식에 적용할 수 있습니다.
아니면 다음 사항을 확인해야 하는 scm
경우 도 있습니다..com/
sed '/url/ { \=\.com/scm/= ! s=\.com/=\.com/scm/=g }'
답변2
! grep -q '/scm/' .git/config && sed "/\turl/ s=\.com\/=\.com\/scm\/=g" .git/config
또는
grep -q '/scm/' .git/config || sed "/\turl/ s=\.com\/=\.com\/scm\/=g" .git/config
파일에 가 포함되어 있지 않으면 /scm/
sed...