
아래 패턴의 문자열이 있습니다.
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