라인 검색 및 라인 바꾸기

라인 검색 및 라인 바꾸기
false###File.txt 
many rows
###online = false --> ONE SHOT import (delete all table contents before importing)
###online = true  --> DIFFERENTIAL import (import without clean the table contents)
###online = true

many rows

온라인에서 행만 선택하고 true를 false로 바꾸고 싶지만 3행일 필요는 없으며 파일의 어느 곳에나 나타날 수 있습니다.

내 시도: test.sh

online=true
perl -i -p -e "s/^(online[ ]*=[ ]*).*$/\1 $online/" File.txt 

작업을 수행하지만 false 앞에 공백을 추가합니다. 누군가가 true라는 단어 앞에 공백을 추가하지 않도록 위 명령을 수정할 수 있습니까?

답변1

당신은 시도 할 수 있습니다 sed:

sed -i '3s/true/false/' file.txt

원본 파일을 다음과 같이 유지하려는 경우 file.txt.bak:

sed -i.bak '3s/true/false/' file.txt

또한 같은 줄에서 여러 번 나타나는 with 를 바꾸려면 다음을 수행하십시오 true.false

sed -i.bak '3s/true/false/g' file.txt

편집하다:귀하의 명확한 질문에 따라 다음을 시도해 보십시오.

sed -i.bak '/DIFFERENTIAL\|[^t][^r][^u][^e]$/!s/true/false/' file.txt

이렇게 하면 "DIFFERENTIAL"이 없는 행과 행 끝에 "true"가 나타나는 행에서 "true"가 "false"로 대체됩니다.

답변2

다음 명령이 도움이 된다는 것을 알았습니다.

sed '/DIFFERENTIAL/!s/true/false/g'

관련 정보