입력하다:

입력하다:

백업 웹 서버를 생성 중인데 백업 서버에 루트 사용자가 한 명만 있기를 원합니다. 따라서 모든 데이터베이스를 이동한 후에 mysqli_connect(...)db.txt.

나는 이미 다음과 같이 썼습니다.

beg="mysqli_connect("
end=");"
#need to find out the database
db="123"
new="'localhost','root','pass','$db'"

cat db.txt | sed "s/$beg.*$end/$beg$new$end/"

모든 구성을 교체하지만 데이터베이스를 찾아야 합니다. $end' ' 와 이전 ' ' 사이의 텍스트를 가져와서 이 작업을 수행 할 수 있지만 ,, 이를 가져오려면 sed를 어떻게 사용합니까?


입력하다:

잠재적인 파일:

sadnkjnadsjknfaskdjfnlasdnfkdsa
safdjnasdkjjfasndka
asfdknjdsakjfnasjdnkfsadnjkads mysqli_connect("192.168.1.10","dave","password","DavesDB");
sdfnjnweewrewqrfgjdgnf
vncnccnvxjncvjn4wrwerewrewerwjvcnxjnvcj
mysqli_connect("192.168.1.10" , "tom" , "password" , 'TomsDB'); dsanjasdknfjansd
sakfdnjsadjkfnsa
sknfdsjdnfjsdnnqwerweq

산출:

sadnkjnadsjknfaskdjfnlasdnfkdsa
safdjnasdkjjfasndka
asfdknjdsakjfnasjdnkfsadnjkads mysqli_connect("localhost","root","rootpassword","DavesDB");
sdfnjnweewrewqrfgjdgnf
vncnccnvxjncvjn4wrwerewrewerwjvcnxjnvcj
mysqli_connect("localhost","root","rootpassword","TomsDB"); dsanjasdknfjansd
sakfdnjsadjkfnsa
sknfdsjdnfjsdnnqwerweq

답변1

데이터베이스 이름을 얻을 필요가 없으며, 그 자체로 무언가를 바꾸는 것은 의미가 없습니다. 변경하지 않고 그대로 두십시오.

beg="mysqli_connect("
new="'localhost','root','pass',"
sed "s/$beg\([^,]\+,\)\{3\}/$beg$new/" file 

당신이 준 예를 다음과 같이 저장하면 file:

$ sed "s/$beg\([^,]\+,\)\{3\}/$beg$new/" file 
sadnkjnadsjknfaskdjfnlasdnfkdsa
safdjnasdkjjfasndka
asfdknjdsakjfnasjdnkfsadnjkads mysqli_connect('localhost','root','pass',"DavesDB");
sdfnjnweewrewqrfgjdgnf
vncnccnvxjncvjn4wrwerewrewerwjvcnxjnvcj
mysqli_connect('localhost','root','pass', 'TomsDB'); dsanjasdknfjansd
sakfdnjsadjkfnsa
sknfdsjdnfjsdnnqwerweq

그런 다음 정규 sed표현식은 뒤에 쉼표( )가 $beg없는 3개의 인스턴스를 찾아 로 바꿉니다 . 데이터베이스 이름은 변경할 이유가 없으므로 그대로 유지됩니다.,\([^,]\+,\)\{3\}$beg$new

($begsed의 확장 정규식 구문을 사용할 수 있는 삭제를 통해 구문을 약간 단순화할 수도 있습니다 .

$ sed -E "s/$beg\(([^,]+,){3}/$beg($new/" file 
sadnkjnadsjknfaskdjfnlasdnfkdsa
safdjnasdkjjfasndka
asfdknjdsakjfnasjdnkfsadnjkads mysqli_connect('localhost','root','pass',"DavesDB");
sdfnjnweewrewqrfgjdgnf
vncnccnvxjncvjn4wrwerewrewerwjvcnxjnvcj
mysqli_connect('localhost','root','pass', 'TomsDB'); dsanjasdknfjansd
sakfdnjsadjkfnsa
sknfdsjdnfjsdnnqwerweq

관련 정보