Redigering av filer på stedet med CLI-enlinjerskommandoer

Bash:
Redigering av filer på stedet med CLI-enlinjerskommandoer

Hvordan:

Når det kommer til redigering av filer på stedet ved bruk av Bash, kommer to fremtredende verktøy i spill: sed og awk. La oss utforske hvordan vi kan bruke disse kraftige verktøyene med noen kodeeksempler.

Bruke sed for enkel tekstutskifting

Følgende kommando erstatter den første forekomsten av “text1” med “text2” i file.txt:

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

For global erstatning (alle forekomster), ville du lagt til en g på slutten:

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

For å endre flere filer samtidig:

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

Bruke awk for mer komplekse manipulasjoner

awk er et annet verktøy som utmerker seg med sine programmeringsmuligheter, spesielt nyttig for tekstbehandling som involverer data basert på felt.

Endre det andre feltet på hver linje til newValue i data.csv, separert med komma:

awk -i inplace -F, '{$2="newValue"; print $0}' OFS=, data.csv

Sikkerhetskopi før du tar spranget

Et praktisk råd: alltid opprett en sikkerhetskopi før redigering på stedet. sed letter dette med -i-alternativet etterfulgt av et suffiks for å opprette en sikkerhetskopi.

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

Denne kommandoen oppretter en sikkerhetskopi av den opprinnelige file.txt som file.txt.bak før erstatningen blir utført.

Dypdykk

Evnen til å redigere filer direkte fra kommandolinjen dukket opp som en naturlig progresjon av Unix-filosofien: å gi brukere muligheten til å effektivt håndtere og manipulere data med så få tastetrykk som mulig. Likevel, denne makten kommer med sine forbehold.

Historisk kontekst

Unix-verktøy som sed og awk har vært rundt siden Unix’ tidlige dager, skapt som en del av dens verktøykassefilosofi, som fokuserer på spesialiserte, sammenstilbare kommandoer. Deres inklusjon i Unix’ arsenal var et svar på behovet for effektiv tekstbehandling i et landskap dominert av kommandolinjegrensesnitt.

Alternativer

Selv om sed og awk er kraftige, er de ikke de eneste alternativene. Perl og Python, for eksempel, har kommandolinjealternativer (-p og -i, henholdsvis) som tillater lignende redigering på stedet med en muligens mer lesbar syntaks for komplekse operasjoner.

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)]"

Hvert alternativ har sine styrker: Perl sine kommando-i-ett-linje-evner er enorme, og Pythons syntaks er muligens mer tilgjengelig for de som ikke er dypt kjent med Unix tekstbehandlingsverktøy.

Gjennomføringsdetaljer

Redigering på stedet er ikke virkelig “på stedet” i teknisk forstand. Både sed -i og awk -i inplace fungerer ved å opprette en midlertidig fil hvor det bearbeidede utdataet lagres før det erstatter den originale filen. Denne tilnærmingen sikrer at filen ikke blir korrupt hvis prosessen blir avbrutt. Implikasjonene er hovedsakelig på ressurser og tillatelser: du må ha nok diskplass for den midlertidige filen og tillatelser til å skape filer i mappen til målfilen din.

Selv om kraftige, må redigeringskommandoer på stedet brukes med forsiktighet. En feilplassert regex kan føre til tap av data, noe som understreker viktigheten av sikkerhetskopier. Til tross for potensielle fallgruver, kan mestring av disse kommandoene betydelig øke din evne til å utføre raske, effektive filmodifikasjoner direkte fra kommandolinjen, som kroppsliggjør Unix-filosofien om å utnytte enkle, kraftige verktøy for å fullføre komplekse oppgaver.