지점 이름의 공백( ) 문자를 밑줄( )로 바꾸고 싶습니다
_
. 예를 들어, 내가sed 테스트파일에는 다음이 포함됩니다.
Node-path: trunk/
Node-path: trunk/src/lib 0
Node-path: trunk/src/lib 0/bla.txt
Node-path: branches/ branch0-blabla_blabla/src
Node-path: branches/ branch0-blabla_blabla
Node-path: branches/branch1 stuffthing
Node-path: branches/branch1 stuffthing/src/lib 0
Node-path: branches/branch1 stuffthing/src/lib 0/bla.txt
Node-path: branches/branch2stuffthing/src/lib 0/bl a.txt
다음과 같이 수정하고 싶습니다.
Node-path: trunk/
Node-path: trunk/src/lib 0
Node-path: trunk/src/lib 0/bla.txt
Node-path: branches/_branch0-blabla_blabla/src
Node-path: branches/_branch0-blabla_blabla
Node-path: branches/branch1_stuffthing
Node-path: branches/branch1_stuffthing/src/lib 0
Node-path: branches/branch1_stuffthing/src/lib 0/bla.txt
Node-path: branches/branch2stuffthing/src/lib 0/bl a.txt
나는 설명 된 것과 비슷한 문제에 직면했습니다.이 문제. 그러나 이 질문에서는 경로의 모든 공백을 바꿔야 합니다. 지점 이름의 공백만 바꾸고 싶습니다.
다른 질문에서 sed
명령을 다음과 같이 수정했습니다.
sed '/^Node-path: branches\//s/ /_/2' < sedtest
그러나 이는 또한 변경되지 않은 상태로 유지되어야 하는 마지막 줄을 수정합니다 Node-path: branches/branch2stuffthing/src/lib_0/bl a.txt
. 내 경험은 매우 제한적이며 "검색 영역"을 과 또는 사이 중 먼저 오는 sed
것으로 적절하게 제한할 수 없습니다 . CentOS 7을 사용하고 있습니다.branches/
/
$
내가 달성하려는 목표는 다음과 같습니다. SVN 저장소를 git 저장소로 포팅하려고 합니다.SO에 대한 이 답변내 개인적인 경험에 따르면 git 브랜치 이름에는 공백을 사용할 수 없습니다. 제안된 대로 svn dump를 통해 이 문제를 해결하려고 합니다.svnbook.red-bean.com에서.
문제가 있는 모든 분기를 파악하고 문자열을 수동으로 교체할 수 있다고 생각합니다. 하지만 그렇게 하면 다용도가 떨어지고 더 많은 작업이 필요하며훨씬 덜 재미있다.
답변1
다음 sed
명령을 작성했습니다.
$ sed '/^Node-path: branches\//s/Node-path: branches\/\([-A-Za-z0-9]*\) \
\([-A-Za-z0-9]*\)/Node-path: branches\/\1_\2/' < sedtest
크고 보기 흉해 보이지만 이 상황에는 효과가 있습니다.
브랜치 이름에서 여러 번 나타나는 공백을 수정하는 것이 아니라 한 번만 수정합니다(따라서 필요한 경우 명령을 다시 실행합니다).
참고로, SVN 덤프를 수정하기 위해 이 작업을 수행하는 경우 Node-copyfrom-path:
이 줄을 같은 방식으로 수정하는 것을 잊지 마세요.
답변2
sed '/^Node-path: branches\/ /s/ /_/2' < sedtest
분기 뒤의 두 슬래시 사이의 공간을 확인하세요.
답변3
펄 트레이스백더 간단하게 만들려면 너무 많은 것을 요구하지는 않지만 다음과 같습니다.
perl -ple 's:^Node-path: branches/\K([^ /]*) :$1_:' <file
또는 awk는 gsub로 변경하여 브랜치 이름의 여러 공백을 처리할 수 있습니다.
awk -F/ -vOFS=/ '$1=="Node-path: branches"{sub(/ /,"_",$2)} 1' <file