Tiedostojen muokkaaminen paikan päällä komentorivin yhden rivin komennoilla

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.txt

Globaalia korvaamista (kaikki esiintymät) varten lisäisit loppuun g:

sed -i 's/text1/text2/g' file.txt

Muokataksesi useita tiedostoja kerralla:

sed -i 's/text1/text2/g' file1.txt file2.txt file3.txt

awk 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.csv

Varmuuskopioi 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.txt

Tä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.txt
python -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.