파일의 모든 항목을 각 항목에 대한 고유한 값으로 바꾸는 방법

파일의 모든 항목을 각 항목에 대한 고유한 값으로 바꾸는 방법

아래와 같이 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

관련 정보