[Shell Script] Replace chuỗi trong 1 file sử dụng bash script


Trong trường hợp bạn muốn thay thế một chuỗi ký tự trong 1 file, thường chúng ta sẽ mở nó vào với 1 trình soạn thảo text editor như notepad++, vs code… Sau đó dùng chức năng replace chuỗi mà công cụ cung cấp. Tuy nhiên nếu nó là 1 file nặng vài chục mb trở lên như file sql chẳng hạn, thì khi mở và thực hiện thao tác replace chuỗi này rất mất thời gian. Thường hệ điều hành có hỗ trợ chúng ta command line để replace text một cách đơn giản. Bạn hãy làm như sau:

Lệnh sed replace chuỗi trong 1 file

VD: Sử dụng sed để replace chuỗi “example” thanh “vinasupport”

Trên Linux

sed -i 's/example/vinasupport/g' /path/to/file.txt

Trên MacOS

sed -i '' 's/example/vinasupport/g' /path/to/file.txt

Vì sao trên MacOS chúng ta cần thêm dấu ” thì vui lòng tham khảo bài viết này.

Trên Windows

powershell -Command "(gc myFile.txt) -replace 'example', 'vinasupport' | Out-File -encoding ASCII myFile.txt"

Trường hợp bạn không muốn nhớ cú pháp của command này thì có thể viết nó thành file bash để chạy.

Bash script replace chuỗi trong 1 file

Tạo 1 file replace.sh có nội dung như sau:

#!/usr/bin/env bash

file=temp/vinasupport.sql
text_from=https://vinasupport.com
text_to=https://vinasupport.com.com

# Escaping slash
text_from=$(echo $text_from | sed 's/\//\\\//g')
text_to=$(echo $text_to | sed 's/\//\\\//g')

# Process replace string
sed -i '' "s/${text_from}/${text_to}/g" $file
echo "Replace string in file ${file}"

Thêm quyền execute cho file replace.sh

sudo chmod +x replace.sh

Để chạy file các bạn làm như sau:

./replace.sh

 

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web