Bruker / bin / bash på RHEL 5.8, og jeg vil automatisere redigering av en fil. Jeg trenger skriptet for å søke i filen og erstatte en linje i filen. Linjeeksempel:
Other line Current date 01121990 Other line
Søk etter denne linjen og erstatt datostrengen med en forhåndsbestemt dato. Jeg kan ikke ekko til en ny fil og angi datoen min siden denne filen blir kopiert fra en serverspesifikk fil. Takk!
Kommentarer
Svar
your_date="your desired date" sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file
Det er den enkleste måten. Dette forutsetter at alle linjene som inneholder en dato som skal erstattes også er de eneste linjene som begynner med «Gjeldende dato».
Merk at brukernivået som kjører denne kommandoen også må ha tillatelse til å redigere den filen.
-i betyr innebygd redigering, noe som betyr at du redigerer filen direkte.
^Current date.*
Betyr alle linjer som begynner med: Nåværende dato og ender med hva som helst. Med andre ord, erstatt hele linjen med det som er i den andre /…/ delen av sed-tingen.
Dobbelt «brukes rundt sed-setningen, slik at variabler vil bli brukt som variabler, ikke strenger.
Kommentarer
- Takk Lizardx at ' er akkurat det jeg trenger, testet det og det fungerer bra
- veldig glad for å høre det.
Svar
ed
kan også gjøre redigering av filer ! Inode-nummeret til den redigerte filen forblir uendret.
file="/path/to/file" your_date="your desired date" ls -i "$file" printf "%s\n" H ",g/^Current date.*/s//${your_date}/" wq | ed -s "$file" ls -i "$file"
sed
ville være det valgte verktøyet her …