Lo strumento migliore per la modifica dei file sul posto non interattivo è ex.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Se hai usato vie 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.
-sabilita la modalità silenziosa per prepararsi exall'uso in batch. (Sopprime i messaggi di output et al.)
-cspecifica il comando da eseguire dopo l' file.txtapertura 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 vie ha essenzialmente identiche funzionalità al scomando 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) eximplementazioni puoi anche usare -cun'opzione aggiuntiva , in questo modo:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Tuttavia, ciò non è richiesto da POSIX.
Il xcomando termina, dopo aver scritto tutte le modifiche al file. Diversamente dal wqsignificato di "scrittura ed uscita", xscrive sul file solo se il buffer è stato modificato. Pertanto, se il file non viene modificato, il timestamp verrà conservato.
.comsolo invece di rimuovere tutto dopo e incluso il primo/carattere? E se avessi un URL comeen.wikipedia.org/wiki/Ubuntunella tua lista?