01/10/2018, 11:07

Câu lệnh sed trong bash shell

Chào mọi người, em đi thẳng vào vấn đề luôn.
Em đang muốn replace một string bằng câu lệnh sed với format như sau.

sed -i "s,url: jdbc:mysql://ip/database?useUnicode=true&characterEncoding=utf8,$url," $FILE

Nhưng khi ra kết quả đã replace xong thì lại ra kết quả này:

url: jdbc:mysql://ip/database?useUnicode=trueurl:characterEncoding=utf8

Dấu & đã bị sed tự thay thành url: mất. Không biết ai có cao kiến fix cái này không ? Mình cần giữ lại dấu &

UPDATE: Chỉ cần sửa pattern thành

url: jdbc:mysql://ip/database?useUnicode=true&characterEncoding=utf8

là sẽ bình thường, không bị mất kí tự &

Dark.Hades viết 13:08 ngày 01/10/2018

Thêm kí tự \ xem sao bạn nhé

sed -i "s,url: jdbc:mysql://ip/database?useUnicode=true\&characterEncoding=utf8,$url," $FILE
17XGOD viết 13:12 ngày 01/10/2018

Không được bác ơi nó vẫn bị thay mất

17XGOD viết 13:09 ngày 01/10/2018

Mình mới để ý lại là dấu & bị thay bởi nguyên cái pattern luôn

& -> url: jdbc:mysql://ip/database?useUnicode=true&characterEncoding=utf8character

Nên kết quả sẽ thành

url: jdbc:mysql://ip/database?useUnicode=trueurl: jdbc:mysql://ip/database?useUnicode=true&characterEncoding=utf8charactercharacterEncoding=utf8character

Dark.Hades viết 13:24 ngày 01/10/2018
sed -i -- 's/url: jdbc:mysql:\/\/ip\/database?useUnicode=true&characterEncoding=utf8/TETTT/g' test.txt

=========================================
test.txt
Before:

url: jdbc:mysql://ip/database?useUnicode=true&characterEncoding=utf8
ssss
sssANDffffANDsf

After:

TETTT
ssss
sssANDffffANDsf
17XGOD viết 13:19 ngày 01/10/2018

Ý mình không phải vậy
Ý mình là jdbc:mysql://ip/database?useUnicode=true&characterEncoding=utf8 thì mình thay một ip mới vào chỗ ip đó thôi, các phần còn lại giữ nguyên, nhưng khi mình thay được ip đó thì dấu & lại bị thay bởi pattern mất.

Dark.Hades viết 13:19 ngày 01/10/2018

Bạn cho mình 1 đoạn nội dung gốc của file đích $FILE, chỗ lúc chưa bị replace để mình thử xem sao

17XGOD viết 13:19 ngày 01/10/2018
profiles:
        active: staging
    datasource:
        url: jdbc:mysql://119.73.152.69:3306/Test_database?useUnicode=true&Encoding=utf8character
        name:

Đó bạn, cái sed này hay thật nhưng rắc rối cũng không kém

17XGOD viết 13:16 ngày 01/10/2018

Damn làm được rồi bác ạ, chỉ cần sửa pattern thành

jdbc:mysql:\/\/ip\/database?useUnicode=true&characterEncoding=utf8

thì nó không bị nữa

Bài liên quan
0