Aumenta la Tua Produttività: Inserire Testo all'Inizio o alla Fine di una Riga con Vim e sed su Linux, Windows e Mac
Modificare file di testo è una delle operazioni più comuni per programmatori e
amministratori di sistema. Vim è un editor di testo molto potente utilizzato
principalmente su sistemi Unix e Linux, mentre sed
è un comando molto utile
per eseguire modifiche di testo in modo non interattivo.
In questo articolo, vedremo come utilizzare Vim
e sed
per inserire un
carattere o una parola, all'inizio o alla fine delle righe di un file. In
particolare, vedrai come inserire un carattere o parola sia all'inizio che alla fine
di tutte le righe del file, o di una sola porzione di esse.
Gli esempi mostrati possono essere eseguiti sia su ambiente Linux, sia su Windows che su Mac poiché utilizzeremo un container Docker per l'esecuzione.
Preparazione dell'ambiente con Docker
La prima attività da fare, propedeutica all'esecuzione dei comandi, è creare l'ambiente Docker.
Iniziamo con il creare un Dockerfile, come segue:
# Utilizza l'immagine base di Ubuntu
FROM debian:stable-slim
# Esegui l'aggiornamento dei pacchetti e installa Vim e sed
RUN apt-get update && apt-get install -y vim sed
# Imposta la directory di lavoro
WORKDIR /mnt/data
Nel file è utilizzata l'immagine debian:stable-slim
sulla quale sono
installati i pacchetti vim
e sed
.
Successivamente andiamo a creare il docker-compose.yml
, come segue:
services:
vim-sed:
build: .
container_name: vim_sed_container
volumes:
- ./work_folder:/mnt/data
command: tail -f /dev/null
nel docker-compose.yml
è presente un volume che monta la cartella
work_folder
sulla /mnt/data
del container. Assicurati di avere una cartella
sulla quale stai implementando, come segue:
cartella_progetto
|- Dockerfile
|- docker-compose.yml
|- work_folder
|- input.csv
|- ...
Nella cartella work_folder
metterai i file sui quali applicare le modifiche
testuali.
Infine, possiamo avviare il container con il comando:
docker-compose up --build -d
questo comando esegue in background il container.
Per eseguire i comandi, sia vim che sed, descritti successivamente, accedere al container docker con il comando:
docker-compose exec -it vim-sed /bin/bash
a questo punto sarai sulla shell del container e da li puoi eseguire i comandi che ora ti descrivo.
Gestione modifiche con Vim
Inserire un Carattere o Parola all'Inizio di Tutte le Righe del File
Supponi di voler inserire la parola BEGIN:
all'inizio di ogni riga del file
input.csv
presente all'interno della work_folder
. Segui i seguenti passi
per eseguire la modifica al file.
1. Apri il file con Vim
Per prima cosa apri il file con Vim, come segue:
vim input.csv
2. Abilita la modalità comando
All'interno di Vim, abilita la modalità comando premendo Esc
.
3. Esegui comando per inserire BEGIN:
all'inizio della riga
Per inserire BEGIN
all'inizio di ogni riga, digita il seguente comando:
:%s/^/BEGIN:/
%
: indica che il comando si applica a tutte le righe del file^
: rappresenta l'inizio della riga
A seguito dell'esecuzione del comando vedrai la parola BEGIN:
comparire su
ogni riga del tuo file. A questo punto, se vorrai, puoi salvare le modifiche
con il comando :w
.
Applicare la Modifica a un intervallo di righe del File
Supponi di voler inserire la parola BEGIN:
all'inizio di alcune righe
selezionate (quindi non di tutte quelle presenti sul file). Segui i passi per
fare ciò.
1. Apri il file con Vim
Per prima cosa apri il file con Vim, come segue:
vim input.csv
2. Abilita la modalità comando
All'interno di Vim, abilita la modalità comando premendo Esc
.
3. Imposta marcatore iniziale
Posiziona il cursore sulla prima riga che vuoi modificare ed imposta un
marcatore con il comando ma
(dove a
è il nome del marcatore che puoi
scegliere a tuo piacimento).
4. Imposta marcatore finale
Posiziona il cursore sull'ultima riga dell'intervallo che vuoi modificare ed
imposta un marcatore con il comando mb
.
5. Esegui comando per inserire BEGIN:
all'inizio della riga
A questo punto hai due marcatori a
e b
. Utilizza il seguente comando per
rinominare le sole righe contenuti nell'intervallo delimitato dai marcatori.
:'a,'bs/^/BEGIN:/
'a,'b
: definisce l'intervallo di righe da considerare^
: rappresenta l'inizio della riga
Applicare la Modifica a Diverse Porzioni del File
Per modificare più intervalli di righe con Vim, ripeti il procedimento descritto nel precedente paragrafo, su ogni intervallo che vorrai modificare. Puoi utilizza o marcatori diversi per ogni coppia di marcatori e poi eseguire i comandi modificando i marcatori oppure utilizzare sempre la stessa coppia di marcatori, richiamando sempre lo stesso comando.
Inserire un Carattere o Parola alla Fine di Tutte le Righe del File
Supponi di voler inserire :END
alla fine di ogni riga del tuo file. I comandi
da eseguire sono i medesimi di quelli presentati per l'inserimento di BEGIN:
all'inizio della riga, con la sola modifica di sostituire il carattere ^
con
il carattere $
, nei comandi di sostituzione.
Quindi, ad esempio, il comando :%s/^/BEGIN:/
diventa :%s/$/:END/
.
Gestione modifiche con sed
Puoi eseguire le medesime modifiche utilizzando il comando sed
.
Inserire un Carattere o Parola all'Inizio di Tutte le Righe del File
Per inserire la parola BEGIN:
all'inizio di tutte le righe del file
input.csv
, esegui il comando:
sed -i 's/^/BEGIN:/' input.csv
-i
: consente di modificare il files/^/BEGIN:/
sostituisce il carattere di inizio riga^
conBEGIN:
Inserire un Carattere o Parola alla Fine di Tutte le Righe del File
Per inserire un carattere o parola alla fine del file, il comando è il medesimo
con la sostituzione di ^
con $
.
sed -i 's/$/:END/' input.csv
-i
: consente di modificare il files/$/:END/
sostituisce il carattere di fine riga$
con:END
Applicare la Modifica a una Porzione del File
Puoi specificare un intervallo di linee sulle quali applicare la modifica. Per applicare, ad esempio, la modifica dalla riga 7 alla riga 15, esegui:
sed -i '7,15s/^/TESTO_DA_INSERIRE/' input.csv
7,15
indica l'intervallo di righe sulle quali inserire la modifica
Applicare la Modifica a Diverse Porzioni del File
Puoi applicare la modifica a diversi intervalli di righe sul file, con il seguente comando:
sed -i -e '2,8s/^/INIZIO___/' -e '15,20s/$/___FINE/' input.csv
-e
opzione che consente di concatenare più comandi
Conclusioni
Sia Vim che sed offrono potenti strumenti per modificare file di testo. La scelta tra i due dipende dalle tue necessità: Vim è ideale per modifiche interattive e sed per operazioni scriptabili e automatizzate. Con l'aiuto di Docker, anche gli utenti Windows e Mac possono facilmente accedere a questi strumenti e modificare file di testo in un ambiente Linux.