텍스트 파일에 줄이 많은데 한 줄 스크립트를 사용하여 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
진짜그리고잘못된.