문제가 있는 svn URL이 포함된 목록을 변환하고 싶습니다.
cat list.txt
//svn.server.address/repos/project/module1/branches/issue-001-name1
//svn.server.address/repos/project/module2/branches/issue-002-name2
//svn.server.address/repos/project/module3/branches/issue-003-name3
...
newlist.txt로 이동하여 다음과 같이 svn 명령과 폴더 이름을 추가하여 확인하세요.
svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue-001-module1
svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-module2
svn co //svn.server.address/repos/project/module3/branches/issue-003-name3 issue-003-module3
...
나는 비슷한 것을 시도했습니다 :
eval $(awk -F'/branches/' '{print $2}' list.txt|awk -F'-' '{print "i="$1"-"$2}')
eval $(awk -F'/branches/' '{print $1}' list.txt|awk -F'/' '{print "j="$NF}')
name=$i"-"$j
awk '{print "svn co "$1" "n}' n=$name list.txt >newlist.txt
그러나 항상 마지막 변수를 얻습니다.
답변1
어크 v1
체크아웃할 모듈로 마지막 경로 요소와 함께 세 번째 경로 요소를 사용하려는 것 같습니다. 이 경우 awk에서 다음을 수행할 수 있습니다.
awk -F/ '
{
split($NF, a, "-")
module=a[1] "-" a[2] "-" $6
print "svn co " $0 " " module
}' list.txt
설명하다
split
$NF
배열은 하이픈으로 구분합니다 a
(예 a[1] = issue
: , a[2] = 001
및 a[3] = name1
). 그런 다음 처음 두 요소는 a
세 번째 경로 요소( )와 연결되어 $6
필요한 모듈 이름을 생성합니다.
어크 v2
awk 버전이 필드 구분 기호를 정규식으로 지정하는 것을 지원하는 경우 다음과 같은 간단한 대안을 사용할 수 있습니다.
awk -F'[/-]' '{ print "svn co " $0 " " $8 "-" $9 "-" $6 }' list.txt
sed
GNU sed 대안:
sed -r 's:(([^/]*/){5})([^/]+)/([^/]+)/(([^-]+-){2})(.*):\1\3/\4/\5\7 \5\3:'
설명하다
(([^/]*/){5})
처음 5개 경로 요소의 경우 주석//
개수는 2개 요소입니다.([^/]+)
모듈 비트.([^/]+)
분기 비트.(([^-]+-){2})
처음 두 개의 하이픈으로 구분된 요소issue-001-
(예:
모든 경우에 출력
svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue-001-module1
svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-module2
svn co //svn.server.address/repos/project/module3/branches/issue-003-name3 issue-003-module3
답변2
이 작업은 다음 방법으로도 쉽게 수행할 수 있습니다 sed
.
$ sed 's|\(.*/\(.*\)\)|svn co \1 \2|g' file
svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue-001-name1
svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-name2
svn co //svn.server.address/repos/project/module3/branches/issue-003-name3 issue-003-name3
답변3
다음 명령을 시도해 볼 수 있습니까?
cat list.txt |
awk -F'/branches/' '{a=gensub(/name/,"module", 1, $2); print "svn co "$0" " a}'
답변4
$cat d.txt //svn.server.address/repos/project/module1/branches/issue-001-name1 //svn.server.address/repos/project/module2/branches/issue-002-name2 //svn.server.address/repos/project/module3/branches/issue-003-name3 $awk 'BEGIN{FS="/"}{print "svn","co",$0,$8}' d.txt svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue-001-name1 svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-name2 svn co //svn.server.address/repos/project/module3/branches/issue-003-name3 issue-003-name3