Gebruik / bin / bash op RHEL 5.8 en ik wil het bewerken van een bestand automatiseren. Ik heb het script nodig om het bestand te doorzoeken en een regel in het bestand te vervangen. Regelvoorbeeld:
Other line Current date 01121990 Other line
Zoek naar deze regel en vervang de datumreeks door een vooraf bepaalde datum. Ik kan “niet echoën naar een nieuw bestand en mijn datum invoeren, aangezien dit bestand zal worden gekopieerd van een serverspecifiek bestand. Bedankt!
Opmerkingen
-
sed
zou hier het gereedschap bij uitstek zijn …
Antwoord
your_date="your desired date" sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file
Dat is de gemakkelijkste manier. Dit veronderstelt dat alle regels die een te vervangen datum bevatten ook de enige regels zijn die beginnen met “Huidige datum”.
Merk op dat het gebruikersniveau dat dit commando uitvoert ook toestemming moet hebben om dat bestand te bewerken.
-i betekent inline bewerken, wat betekent dat u het bestand rechtstreeks bewerkt.
^Current date.*
Betekent alle regels die beginnen met: Huidige datum en eindigend in wat dan ook. Met andere woorden, vervang de hele regel door wat in het tweede /…/ deel van het sed-ding staat.
Double “worden gebruikt rond de sed-instructie zodat variabelen als variabelen worden gebruikt, niet strings.
Reacties
- Bedankt Lizardx dat ' precies is wat ik nodig heb, getest en het werkt geweldig
- fijn om te horen.
Antwoord
ed
kan ter plaatse bewerken van bestanden ook! Het inode-nummer van het bewerkte bestand blijft ongewijzigd.
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"