Có thể tìm kiếm trong một tệp bằng cách sử dụng shell và sau đó thay thế một giá trị không? Khi tôi cài đặt một dịch vụ tôi muốn có thể tìm kiếm một biến trong một tập tin cấu hình và sau đó thay thế/chèn các thiết lập của riêng tôi trong giá trị đó.Tìm và thay thế trong kịch bản lệnh shell
Trả lời
Chắc chắn, bạn có thể làm điều này bằng cách sử dụng sed hoặc awk. ví dụ sed:
sed -i 's/Andrew/James/g' /home/oleksandr/names.txt
Thông thường một công cụ như awk hoặc sed được sử dụng cho việc này.
$ sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt
Bạn có thể sử dụng sed để làm điều này:
sed -i 's/toreplace/yoursetting/' configfile
sed có lẽ là có sẵn trên tất cả các unix như hệ thống ra khỏi đó. Nếu bạn muốn thay thế nhiều hơn một điều xảy ra bạn có thể thêm một g đến s-lệnh:
sed -i 's/toreplace/yoursetting/g' configfile
Hãy cẩn thận vì đây hoàn toàn có thể phá hủy configfile của bạn nếu bạn không xác định toreplace có giá trị của bạn một cách chính xác. sed cũng hỗ trợ các biểu thức chính quy trong việc tìm kiếm và thay thế.
sed -i 's/variable/replacement/g' *.conf
Nhìn vào awk UNIX power tools, sed, grep và in-place edit of files với Perl.
Bạn có thể sử dụng sed để thực hiện tìm kiếm/thay thế. Tôi thường làm điều này từ một kịch bản bash shell, và di chuyển các tập tin gốc có chứa các giá trị được thay thế với một cái tên mới, và chạy sed viết ra tên tập tin ban đầu của tôi như thế này:
#!/bin/bash
mv myfile.txt myfile.txt.in
sed -e 's/PatternToBeReplaced/Replacement/g' myfile.txt.in > myfile.txt.
Nếu bạn don' t chỉ định một đầu ra, thay thế sẽ đi đến stdout.
filepath="/var/start/system/dir1"
searchstring="test"
replacestring="test01"
i=0;
for file in $(grep -l -R $searchstring $filepath)
do
cp $file $file.bak
sed -e "s/$searchstring/$replacestring/ig" $file > tempfile.tmp
mv tempfile.tmp $file
let i++;
echo "Modified: " $file
done
Bạn có thể kiểm tra 'nhập mã ở đây' trong mã của bạn không? Có lẽ nó không nên ở đó. Nhân tiện: Trong hầu hết các trường hợp, bạn nên cung cấp ý kiến trong giải pháp của mình hoặc ít nhất là tóm tắt cách tiếp cận mà bạn chọn giải quyết vấn đề. –
Chắc chắn bạn có thể sử dụng sed! – Mithrandir