Mikä ' on paras tapa muokata tiedostoa bash-komentosarjalla?

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" 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *