리터럴 "*"를 sed와 일치시키는 방법은 무엇입니까?

리터럴 "*"를 sed와 일치시키는 방법은 무엇입니까?

test.php라는 파일에 다음 줄이 있습니다.

'dbs_password' => 'a8b*cyP0',

다음으로 바꾸고 싶습니다.

'dbs_password' => 'password-here',

그래서 저는 다음 sed명령 구문을 사용합니다.

$ sed -e "s:'dbs_password' => 'a8b*cyP0',:'dbs_password' => 'password-here':" -i test.php

하지만 변경/교체되지는 않습니다.

sed누구든지 이러한 유형의 코드를 사용하는 올바른 방법에 대한 지식을 공유할 수 있다면 감사하겠습니다.

답변1

문제는 *정규식의 의미가 0 or more of the preceeding character리터럴을 의미하지 않는다는 것입니다 *. 와 일치하려면 *다음이 필요합니다.탈출하다그것. 예를 들어:

sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php

그러나 이는 불필요하게 복잡합니다. 바꾸고 싶다면발생하는 모든 상황문자열을 사용하면 간단히 다음을 수행할 수 있습니다 a8b*cyP0.password-here

sed -i "s:a8b\*cyP0:password-here:" test.php

바꾸고 싶다면오직일치하는 행은 dbs_password다음을 수행합니다.

sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php

마지막 사용패턴 캡처동일한 패턴을 두 번 인쇄하는 것을 방지합니다.

관련 정보