리터럴 '*'를 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리터럴을 의미하지 않는다는 것입니다 *. a 와 일치하려면 *다음을 수행해야 합니다.탈출하다그것. 예를 들어:

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

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

관련 정보