Sed: mengganti digit

9

Saya mencoba menulis beberapa skrip instalasi ketika saya menginstal / meningkatkan Ubuntu. Saya mengalami masalah dengan memperbaiki logrotate.d:

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

Saya ingin berubah rotate nnnmenjadi rotate 99. Ini harus bekerja untuk nnn menjadi sejumlah digit (biasanya 1 atau 2), namun tidak mempengaruhi postrotategaris.

Saya sudah mencoba keduanya tetapi juga tidak melakukan apa yang saya butuhkan (dan saya diuji dengan nnn menjadi 1,2 atau 3 digit).

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

Jawaban:

4

rotate[0-9]*menggantikan rotatediikuti dengan nol atau lebih digit, yang cocok dengan akhir postrotate. rotate[0-9]hanya menggantikan satu digit. Selanjutnya Anda kehilangan ruang setelahnya rotate. Saya pikir ini melakukan apa yang Anda inginkan; itu juga menangani garis indentasi:

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

Tambahkan -iopsi ke sedjika Anda ingin mengubah file di tempat.

Gilles 'SANGAT berhenti menjadi jahat'
sumber