하위 문자열을 기본 문자열의 다른 값으로 교체

하위 문자열을 기본 문자열의 다른 값으로 교체

다음 패턴의 문자열이 있습니다

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로 대체합니다. 패턴1은
\(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

관련 정보