Med / bin / bash på RHEL 5.8 och jag vill automatisera redigering av en fil. Jag behöver skriptet för att söka i filen och ersätta en rad i filen. Linjeexempel:
Other line Current date 01121990 Other line
Sök efter den här raden och ersätt datumsträngen med ett förutbestämt datum. Jag kan inte echo till en ny fil och ange mitt datum eftersom den här filen kommer att kopieras från en serverspecifik fil. Tack!
Kommentarer
Svar
your_date="your desired date" sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file
Det är det enklaste sättet. Detta förutsätter att alla rader som innehåller ett datum som ska ersättas också är de enda raderna som börjar med ”Aktuellt datum”.
Observera att användarnivån som kör det här kommandot också måste ha behörighet att redigera filen.
-i betyder inline-redigering, vilket innebär att du redigerar filen direkt.
^Current date.*
Betyder alla rader som börjar med: Aktuellt datum och slutar med vad som helst. Med andra ord, ersätt hela raden med vad som finns i den andra /…/ delen av sed-saken.
Dubbel ”används runt sed-uttalandet så att variabler kommer att användas som variabler, inte strängar.
Kommentarer
- Tack Lizardx att ' är exakt vad jag behöver, testade det och det fungerar bra
- jätteglad att höra det.
Svar
ed
kan göra redigering av filer på plats också! Den redigerade filens inodnummer förblir oförändrat.
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
skulle vara det valbara verktyget här …