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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.