아래와 같이 MyID가 여러 번 나타나는 XML 파일이 있습니다.
MyID="dett090900990000"
MyID=""
모든 값을 고유한 값으로 바꾸고 싶습니다 .
예를 들어, xml 파일에 3개의 항목이 있는 경우 MyID=""
스크립트를 실행할 때 MyID 값으로 사용될 매개변수를 전달합니다(그러나 각 항목에 증분 값이 할당됩니다).
즉, 스크립트를 다음과 같이 실행할 때myscript.sh 7777777878889888
출력은 다음과 같아야 합니다(즉, MyID의 모든 값이 변경되고 이제 고유한 값을 갖게 됨을 의미합니다). 무엇이든 가능합니다(숫자, 문자열 및 혼합).
MyID="77777778788898881"
MyID="77777778788898882"
MyID="77777778788898883"
보시다시피 제공된 값에 1, 2, 3이 추가됩니다.
이 문제를 해결하기 위해 간단한 명령을 찾고 있습니다! 감사합니다!
답변1
Perl에서는 다음과 같이 할 수 있습니다:
perl -pe 'BEGIN { $v=shift; }
s/(MyID=")[^"]*(")/$1.$v.++$t.$2/ge' 7777777878889888 foo.xml bar.xml
답변2
간단하지는 않지만 작동합니다. 스크립트에는 두 개의 매개변수가 있습니다. Arg1은 일치시킬 문자열이고 Arg2는 입력 파일의 파일 이름입니다. 솔루션은 sed 대신 awk를 사용합니다.
#!/bin/bash
# myscript.sh
# Usage myscript.sh <string to match> <filename>
MyID=$1
awk -v MyID=$MyID 'BEGIN{ mynum=1; } { if (match($0,MyID) ) { sub(MyID, sprintf("%s%d", MyID, mynum) ) mynum++; } print }' $2