내용이 포함된 텍스트 파일이 있습니다 keyvalue.txt
.
one=abc
two=def
three=ghi
four=jkl
five=mno
six=pqr
xyz
이제 나는 될 가치 에 추가하고 싶습니다 .three
three=ghixyz
생성된 파일 콘텐츠는 다음과 같아야 합니다.
one=abc
two=def
three=ghixyz
four=jkl
five=mno
six=pqr
쉘 스크립트에서 이를 수행할 수 있는 방법이 있습니까?
답변1
여러 가지 방법이 있습니다.예를 들어그리고 sed
:
sed -i 's/^RELEASESTATUS=.*/&xyz/' keyvalue.txt
RELEASESTATUS=
이는 전체 줄(thanks)과 일치하는 ( )로 시작하는 줄을 찾고 .*
해당 줄을 줄의 내용( )으로 바꾸고 &
그 뒤에 가 옵니다 xyz
.
답변2
~처럼스티븐의 대답, 그러나 약간 다르게 수행됩니다.
sed -i '/^RELEASESTATUS=/s/$/xyz/' keyvalue.txt
전체 줄을 자체 복사본으로 바꾸고 끝에 일부 텍스트를 추가하는 대신 먼저 올바른 줄( RELEASESTATUS=
맨 처음)을 찾은 다음 해당 줄 끝에서 원하는 텍스트를 바꿉니다.
s
이는 대체 명령( )의 일반적인 형식이 다음과 sed
같다는 사실을 이용합니다.
start,end s/pattern/replacement/flags
여기서 start
및 end
는 시작 주소와 끝 주소로 명령이 적용되어야 하는 행 범위를 제공합니다("주소"는 행 번호, 정규식 또는 오프셋일 수 있음). 단일 주소를 사용하는 경우 명령은 해당 줄(또는 특정 정규식과 일치하는 단일 줄)에만 적용됩니다.
답변3
다음을 시도해 볼 수도 있습니다 awk
.
awk 'BEGIN { FS = OFS = "=" }; $1 == "RELEASESTATUS" { $2 = $2"xyz"; }; 1' keyvalue.txt
이미 가지고 있거나 GNU awk 4.1.0
나중에 할 수 있는 경우:
gawk -i inplace -v INPLACE_SUFFIX=.bak 'BEGIN { FS = OFS = "=" }; $1 == "RELEASESTATUS" { $2 = $2"xyz"; }; 1' keyvalue.txt