sed를 사용하여 여러 패턴을 일치시키고 그 중 일부를 변경하는 방법

sed를 사용하여 여러 패턴을 일치시키고 그 중 일부를 변경하는 방법

내 파일에 다음 줄이 있습니다.

SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=false
SUT_INST_PING=false

패턴과 일치 SUT_INST_EXAMPLES하고 로 SUT_INST_PING설정된 sed 라인을 어떻게 생성합니까 ?falsetrue

짝퉁이라도 바꾸고 싶지 않아서 false간단히 교체할 수는 없잖아요 !trueSUT_INST_PITSUT_INST_TICS

지금 두 개의 sed명령이 실행 중이지만 한 줄만 필요합니다!

sed -i "s/SUT_INST_EXAMPLES=false/SUT_INST_EXAMPLES=true/g" <file>
sed -i "s/SUT_INST_PING=false/SUT_INST_PING=true/g" <file>

또 다른 점은 해당 줄에서 -> 또는 -> 를 sed매개변수화할 수 있어야 하지만 & 만 매개변수화할 수 있어야 한다는 것입니다 .falsetruetruefalseSUT_INST_EXAMPLESSUT_INST_PING

솔루션(@RomanPerekhrest에 따름) 및 보내기(스크립트 예상)에서 이를 사용하는 방법:

send "sed -i 's\/^\\(SUT_INST_EXAMPLES\\|SUT_INST_PING\\)=false\/\\1=true\/' file\r"

답변1

sed방법:

sed -i 's/^\(SUT_INST_EXAMPLES\|SUT_INST_PING\)=false/\1=true/' file

file콘텐츠:

SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=true
SUT_INST_PING=true

\(SUT_INST_EXAMPLES\|SUT_INST_PING\)- 대체 그룹, 문자열 시작 부분에서 SUT_INST_EXAMPLESOR 일치SUT_INST_PING


선택하다멍하니(GNU awk) 방법:

gawk -i inplace -F'=' -v OFS='=' '$1~/^SUT_INST_(EXAMPLES|PING)/{$2=($2=="false")? "true":"false"}1' file

답변2

다음과 같이 간단히 전환할 수 있습니다.

sed -i -E '/^SUT_INST_(PING|EXAMPLES)=/{s/false/true/;t;s/true/false/;}' infile

이는 현재 값 true으로 변경되거나 false현재 값을 기준으로 변경됩니다.falsetrue

답변3

sed각 줄에서 여러 작업을 수행할 수 있습니다.

sed -e '...' -e '...' file

따라서 적어도 두 sed통화를 하나로 결합할 수 있습니다.

sed -i -e 's/^SUT_INST_EXAMPLES=false/SUT_INST_EXAMPLES=true/' \
       -e 's/^SUT_INST_PING=false/SUT_INST_PING=true/' file

대체를 매개변수화하려면 변수를 사용하십시오.

examples="true"
ping="false"

sed -i -e "s/^SUT_INST_EXAMPLES=.*\$/SUT_INST_EXAMPLES=$examples/" \
       -e "s/^SUT_INST_PING=.*\$/SUT_INST_PING=$ping/" file

위의 내용은 무조건 SUT_INST_EXAMPLES및 값을 각각 및 값 SUT_INST_EXAMPLES으로 설정합니다 .$examples$ping

관련 정보