매개변수 파일의 일부 매개변수를 다음과 같이 수정해야 합니다.
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
에 따라 적절한 파일을 사용하십시오(참조sed
sed -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
에 와일드카드를 추가하면 \s
0개 이상의 공백이 포함됩니다. 귀하의 명령은 다음과 같습니다
sed -i 's/MY_VAR\s*=\s*[A-Z]*/MY_VAR=NO/' sed.txt