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