SED 무시 및 교체

SED 무시 및 교체

텍스트 파일에 줄이 많은데 한 줄 스크립트를 사용하여 true값 을 변경하고 싶습니다.false

bash-3.2$ grep online test.txt
# online = false --> ONE SHOT import (delete all table contents before importing)
# online = true  --> DIFFERENTIAL import (import without clean the table contents)
online =  true

나는 이것을 시도했다

sed -i.bak '/DIFFERENTIAL\|/ONE SHOT\/!s/online.*/online = false/g'

하지만 다음과 같은 오류가 발생합니다.

sed: -e expression #1, char 17: unknown command: `O'

online = true처음 두 행은 변경 하지 않고 세 번째 행만 변경하고 싶습니다 online = false. 파일의 어느 위치에나 있을 수 있지만 일치합니다 online =. 그래서 나는 명령이 1과 2를 무시하고 3만 변경하도록 하고 싶습니다.

답변1

로 시작하는 줄만 변경하려면 online다음과 같이 하는 것이 가장 쉬울 것입니다.

sed 's/^online\ *=.*/online = false/g'

이렇게 하면 시작하는 줄이 #완전히 무시됩니다.

@mikeserv가 제안한 더 간단하지만 동일하지는 않은 대안은 다음과 같습니다.

sed '/^online/s/true/false/'

답변2

통과하다:

awk '/online =/{c++} c==3{gsub("true","false")}1' test.txt

이는 모든 발생을 일치시키고 3개의 발생이 발견되면 online =카운터 플래그를 증가시킵니다 .c++c==3진짜그리고잘못된.

관련 정보