sed 가능한 공백 일치

sed 가능한 공백 일치

매개변수 파일의 일부 매개변수를 다음과 같이 수정해야 합니다.

MY_VAR=YES

나는 `sed를 사용하고 싶었고 이것을 생각해냈습니다:

sed -i 's/MY_VAR=[A-Z]*/MY_VAR=NO/' sed.txt이것은 작동하는 것 같습니다. 이제 파일이 다음과 같으면 일치하도록 하고 싶습니다.

MY_VAR = YES

또는 다른 빈 형식인 경우 어떻게 해야 합니까? 나는 그것을 시도했지만 sed -i 's/MY_VAR\s=\s[A-Z]*/MY_VAR=NO/' sed.txt성공하지 못했습니다. 이 작업을 올바르게 수행하려면 어떻게 해야 합니까?

답변1

너의 유일한 공백인 것 같아필요일치하는 것은 변수 이름과 등호 사이의 내용입니다. 어쨌든 등호 뒤의 내용은 모두 대체됩니다.

사용 표준 sed:

sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt

하위 표현식은 [[:blank:]]*0개 이상의 공백 문자와 일치합니다. "공백 문자"는 탭 문자 또는 공백입니다. 교체는 변수 이름으로 시작하고 그 뒤에 선택적 공백과 a가 오는 전체 줄을 =변수 이름과 문자열로 바꿉니다 =NO.

시험:

$ cat params.txt
MY_VAR=YES
MY_VAR = MAYBE
MY_VAR  =       OK
$ sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt
MY_VAR=NO
MY_VAR=NO
MY_VAR=NO

파일을 내부 편집하려면 params.txt사용 중인 항목 -i에 따라 적절한 파일을 사용하십시오(참조sedsed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?) 또는 사용

cp params.txt params.txt.tmp &&
sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt.tmp >params.txt &&
rm -f params.txt.tmp

답변2

에 와일드카드를 추가하면 \s0개 이상의 공백이 포함됩니다. 귀하의 명령은 다음과 같습니다

sed -i 's/MY_VAR\s*=\s*[A-Z]*/MY_VAR=NO/' sed.txt

관련 정보