
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
마지막 것은 다음을 사용합니다.패턴 캡처동일한 패턴을 두 번 인쇄하는 것을 방지합니다.