Käyttämällä / bin / bash -ohjelmaa RHEL 5.8: ssa ja haluan automatisoida tiedoston muokkaamisen. Tarvitsen komentosarjan etsimään tiedostosta ja korvaamaan rivin tiedostossa. Riviesimerkki:
Other line Current date 01121990 Other line
Etsi tätä riviä ja korvaa päivämäärämerkkijono ennalta määrätyllä päivämäärällä. En voi ”toistaa uutta tiedostoa ja kirjoittaa päivämääräni, koska tiedosto kopioidaan palvelinkohtaisesta tiedostosta. Kiitos!
Kommentit
-
sed
olisi tässä valittava työkalu …
Vastaus
your_date="your desired date" sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file
Se on helpoin tapa. Tämä olettaa, että kaikki rivit, jotka sisältävät korvattavan päivämäärän, ovat myös ainoat rivit, jotka alkavat ”Nykyinen päivämäärä”.
Huomaa, että tätä komentoa suorittavalla käyttäjätasolla on oltava myös lupa muokata kyseistä tiedostoa.
-i tarkoittaa sisäistä muokkausta, mikä tarkoittaa, että muokkaat tiedostoa suoraan.
^Current date.*
Tarkoittaa kaikkia rivejä, jotka alkavat: Nykyinen päivämäärä ja päättyy mihin tahansa. Toisin sanoen, korvaa koko rivi sillä, mikä on sed-jutun toisessa /…/ osassa.
Sed-lauseen ympärillä käytetään kaksoismerkkiä, jotta muuttujia käytetään muuttujina, ei merkkijonot.
Kommentit
- Kiitos Lizardxille, että ' on juuri tarvitsemani, testannut sen ja sen toimii hyvin
- iloinen kuulla se.
Vastaa
ed
voi myös muokata tiedostoja paikan päällä ! Muokatun tiedoston inodinumero pysyy muuttumattomana.
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"