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ự &

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

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

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

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

& -> 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

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
1 Like

Ý mình không phải vậy :joy:
Ý 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.

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

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 :joy:

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

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?