Lo strumento migliore per la modifica dei file sul posto non interattivo è ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Se hai usato vi
e se hai mai digitato un comando che inizia con due punti :
hai usato un comando ex. Naturalmente molti dei comandi più avanzati o "fantasiosi" che puoi eseguire in questo modo sono estensioni di Vim (ad es. :bufdo
) E non sono definiti nelle specifiche POSIX perex
, ma tali specifiche consentono un grado davvero sorprendente di potenza e flessibilità in modalità non visiva modifica del testo (interattivo o automatico).
Il comando sopra ha più parti.
-s
abilita la modalità silenziosa per prepararsi ex
all'uso in batch. (Sopprime i messaggi di output et al.)
-c
specifica il comando da eseguire dopo l' file.txt
apertura del file ( , in questo caso) in un buffer.
%
è un identificatore di indirizzo equivalente a 1,$
—it significa che il seguente comando viene applicato a tutte le righe del buffer.
s
è il comando sostitutivo che probabilmente conosci già. È comunemente usato vi
e ha essenzialmente identiche funzionalità al s
comando dised
, sebbene alcune delle funzionalità regex avanzate possano variare in base all'implementazione. In questo caso da ".com" alla fine della riga viene sostituito solo con ".com".
La barra verticale separa i comandi sequenziali da eseguire. In molte (la maggior parte) ex
implementazioni puoi anche usare -c
un'opzione aggiuntiva , in questo modo:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Tuttavia, ciò non è richiesto da POSIX.
Il x
comando termina, dopo aver scritto tutte le modifiche al file. Diversamente dal wq
significato di "scrittura ed uscita", x
scrive sul file solo se il buffer è stato modificato. Pertanto, se il file non viene modificato, il timestamp verrà conservato.
.com
solo invece di rimuovere tutto dopo e incluso il primo/
carattere? E se avessi un URL comeen.wikipedia.org/wiki/Ubuntu
nella tua lista?