다음 파일이 있습니다
more /tmp/file
number_of_cars_are=$number_of_cars_are
LOG "number_of_cars_are=$number_of_cars_are"
echo "number_of_cars_are are $number_of_cars_are"
grep number_of_cars_are /tmp/test
&로 시작하는 줄 에만 주석을 달고 싶습니다 number_of_cars_are=
. 해당 줄이 이미 주석이라면 sed는 이를 무시해야 합니다.
그래서 우리는 다음을 수행했습니다.
sed '/^[^#].*^[[:space:]]*number_of_cars_are=/ s/^/#/' /tmp/file
그러나 number_of_cars_are=$number_of_cars_are 줄은 동일하게 유지됩니다.
기대되는 성과
more /tmp/file
# number_of_cars_are=$number_of_cars_are
LOG "number_of_cars_are=$number_of_cars_are"
echo "number_of_cars_are are $number_of_cars_are"
grep number_of_cars_are /tmp/test
답변1
줄을 일치시키는 데 사용하는 정규식에는 두 개의 줄 시작 앵커( ^
)가 있으므로 두 번째 앵커는 실제 ^
기호에만 일치합니다. ^
before 를 제거하면 [[:space:]]
표현식은 일치하지만 일치 항목이 너무 많습니다.
# number_of_cars_are=$number_of_cars_are
# LOG "number_of_cars_are=$number_of_cars_are"
LOG "
일치 .*
하므로 허용됩니다. 표현식의 시작 부분을 제거하겠습니다.
sed '/^[[:space:]]*number_of_cars_are=/ s/^/#/'
이는 공백 문자(없음 포함)로 시작하고 그 뒤에 오는 모든 행과 일치합니다 number_of_cars_are=
. 이에 의해 주석 줄은 일치하지 않으므로 다시 처리되지 않으며, 로 바로 시작하는 줄이 number
일치됩니다.