Sed: thay thế chữ số


9

Tôi đang cố gắng viết một số tập lệnh cài đặt khi tôi cài đặt / nâng cấp Ubuntu. Tôi đang gặp sự cố với việc sửa lỗi logrotate.d:

/var/log/ufw.log
{
rotate 7
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
    reload rsyslog >/dev/null 2>&1 || true
endscript
}

Tôi muốn đổi rotate nnnsang rotate 99. Nó phải hoạt động cho nnn là bất kỳ số chữ số nào (thông thường là 1 hoặc 2), nhưng không ảnh hưởng đến postrotatedòng.

Tôi đã thử cả hai nhưng không làm được những gì tôi cần (và tôi đã thử nghiệm với nnn là 1,2 hoặc 3 chữ số).

sudo sed  's/rotate[0-9]*/rotate 99/' /etc/logrotate.d/ufw
sudo sed  's/^rotate[0-9]/rotate 99/' /etc/logrotate.d/ufw

Câu trả lời:



4

rotate[0-9]*thay thế rotatetheo sau bằng 0 hoặc nhiều chữ số, khớp với phần cuối của postrotate. rotate[0-9]chỉ thay thế một chữ số. Hơn nữa, bạn đang thiếu không gian sau rotate. Tôi nghĩ rằng điều này làm những gì bạn muốn; nó cũng xử lý các dòng thụt lề:

sudo sed 's/^\( *rotate *\)[0-9][0-9]*/\1 99/' /etc/logrotate.d/ufw

Thêm -itùy chọn vào sednếu bạn muốn thay đổi tập tin tại chỗ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.