Bash:
Tiedostojen muokkaaminen paikan päällä komentorivin yhden rivin komennoilla
Miten:
Kun on kyse tiedostojen paikan päällä tapahtuvasta muokkaamisesta Bashin avulla, kaksi merkittävää työkalua nousee esiin: sed ja awk. Tutkitaan, miten näitä tehokkaita työkaluja käytetään joillakin koodiesimerkeillä.
sed käyttö yksinkertaiseen tekstin korvaamiseen
Seuraava komento korvaa ensimmäisen esiintymän “text1” tekstillä “text2” tiedostossa file.txt:
sed -i 's/text1/text2/' file.txtGlobaalia korvaamista (kaikki esiintymät) varten lisäisit loppuun g:
sed -i 's/text1/text2/g' file.txtMuokataksesi useita tiedostoja kerralla:
sed -i 's/text1/text2/g' file1.txt file2.txt file3.txtawk käyttö monimutkaisempiin manipulaatioihin
awk on toinen työkalu, joka loistaa ohjelmointikyvyillään, erityisesti tekstinkäsittelyssä, joka sisältää kenttäpohjaista dataa.
Muuttaen jokaisen rivin toisen kentän newValue arvoon data.csv-tiedostossa, pilkulla erotettuna:
awk -i inplace -F, '{$2="newValue"; print $0}' OFS=, data.csvVarmuuskopioi ennen kuin hyppäät
Käytännön neuvona: luo aina varmuuskopio ennen paikan päällä tapahtuvaa muokkausta. sed helpottaa tätä -i-vaihtoehdon avulla, jota seuraa suffiksi varmuuskopion luomiseksi.
sed -i.bak 's/text1/text2/g' file.txtTämä komento luo alkuperäisen file.txt-tiedoston varmuuskopion nimellä file.txt.bak ennen korvauksen suorittamista.
Syvä sukellus
Kyky muokata tiedostoja suoraan komentoriviltä syntyi luonnollisena jatkona Unixin filosofialle: käyttäjien voimaannuttaminen tehokkaaseen datan hallintaan ja käsittelyyn mahdollisimman vähin näppäimistön painalluksin. Tämä voima sisältää kuitenkin varjopuolia.
Historiallinen konteksti
Unix-työkalut kuten sed ja awk ovat olleet osa Unixin alkuajoista lähtien, luotu osana sen työkalupakki-filosofiaa, joka keskittyy erikoistuneisiin, yhdisteltäviin komentoihin. Niiden sisällyttäminen Unixin asevarastoon oli vastaus tarpeeseen tehokkaasta tekstinkäsittelystä maisemassa, jota hallitsevat komentorajapinnat.
Vaihtoehdot
Vaikka sed ja awk ovat tehokkaita, ne eivät ole ainoita vaihtoehtoja. Perl ja Python esimerkiksi tarjoavat komentorivivaihtoehdot (-p ja -i, vastaavasti), jotka mahdollistavat samankaltaisen paikan päällä tapahtuvan muokkauskyvyn, mahdollisesti selkeämmällä syntaksilla monimutkaisiin operaatioihin.
perl -pi -e 's/text1/text2/g' file.txtpython -c "import fileinput, sys; [sys.stdout.write(line.replace('text1', 'text2')) for line in fileinput.input(files='file.txt', inplace=True)]"Kullakin vaihtoehdolla on omat vahvuutensa: Perl yhden rivin kyvyt ovat valtavat, ja Pythonin syntaksi on mahdollisesti saavutettavampi niille, jotka eivät ole syvästi perehtyneet Unixin tekstinkäsittelytyökaluihin.
Toteutuksen yksityiskohdat
Paikan päällä tapahtuva muokkaus ei teknisessä mielessä ole todella “paikan päällä”. Sekä sed -i että awk -i inplace toimivat luomalla väliaikaisen tiedoston, johon käsitelty tulos tallennetaan ennen alkuperäisen tiedoston korvaamista. Tämä lähestymistapa varmistaa, että tiedosto ei vahingoitu, jos prosessi keskeytyy. Seuraukset ovat lähinnä resursseissa ja oikeuksissa: sinulla on oltava tarpeeksi levytilaa väliaikaistiedostolle ja oikeudet luoda tiedostoja kohdetiedostosi hakemistoon.
Vaikka tehokkaita, paikan päällä tapahtuvia muokkauskomentoja on käytettävä varoen. Huonosti sijoitettu regex voi johtaa datan menetykseen, mikä korostaa varmuuskopioiden tärkeyttä. Mahdollisista ansakuopista huolimatta näiden komentojen hallitseminen voi merkittävästi parantaa kykyäsi suorittaa nopeita, tehokkaita tiedostomuokkauksia suoraan komentoriviltä, ilmentäen Unixin filosofiaa yksinkertaisten, tehokkaiden työkalujen käytöstä monimutkaisten tehtävien suorittamiseen.