하위 문자열을 기본 문자열의 다른 값으로 바꾸기

하위 문자열을 기본 문자열의 다른 값으로 바꾸기

아래 패턴의 문자열이 있습니다.

SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD

다른 숫자 SrcEndVer로 대체할 값이 필요합니다 .1409

여기서 숫자는 변수에 저장됩니다.

Var=1600

따라서 1409값을 변수로 바꿔야 합니다.Var

예를 들어 아래와 같은 출력과 같습니다.

SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

답변1

이것은 가능성이 있습니다:

sed 's/;SrcEndVer=[0-9]*/;SrcEndVer=1600/'

산출:

SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

답변2

사용밀러와 더불어DKVP: 키-값 쌍체재:

$ echo 'SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD' | 
    mlr --dkvp --fs ';' put '$SrcEndVer = 1600'
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

답변3

다른 정보가 제공되지 않았으므로 다음 sed 명령을 시도해 보겠습니다.

sed -i -e 's/\(.*;SrcEndVer=\)[^;]*\(;.*\)/\11600\2/' file.txt

그러면 file.txt문자열이 포함된 파일이 됩니다.

s는 sed를 대체하는 명령입니다.
s/pattern1/pattern2/는 패턴1을 패턴2로 대체합니다.
\(xxx\)이는 \1과 같은 숫자로 참조되는 역참조입니다.

sed는 ;SrcEndVer=를 포함한 모든 것을 첫 번째 역참조 \(.*;SrcEndVer=\)에 넣은 다음 SrcWorkspaceName=abc_1234;SrcEndVer=
';'이 아닌 문자만큼 [^;]*을 넣습니다. 1409
두 번째 역참조 \(다음 ';' 및 .*\)에서 줄의 나머지 부분 ;Lang=ENU,FRA,NLD.

SrcWorkspaceName=abc_1234;SrcEndVer=sed는 이를 첫 번째 역참조 \1 , 그 다음 1600, 두 번째 역참조 \2 로 대체합니다 ;Lang=ENU,FRA,NLD.

그러면 다음이 제공됩니다.
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

관련 정보