A melhor ferramenta para edição in-loco de arquivos não interativa é ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Se você usou vi
e já digitou um comando que começa com dois pontos, :
você usou um comando ex. É claro que muitos dos comandos mais avançados ou "sofisticados" que você pode executar dessa maneira são extensões do Vim (por exemplo :bufdo
) e não estão definidos nas especificaçõesex
do POSIX , mas essas especificações permitem um nível verdadeiramente surpreendente de poder e flexibilidade em sistemas não visuais. edição de texto (interativa ou automatizada).
O comando acima possui várias partes.
-s
ativa o modo silencioso para se preparar ex
para o uso em lote. (Suprimir as mensagens de saída et. Al.)
-c
especifica o comando a ser executado assim que o arquivo ( file.txt
neste caso) for aberto em um buffer.
%
é um especificador de endereço equivalente a 1,$
— significa que o seguinte comando é aplicado a todas as linhas do buffer.
s
é o comando substituto com o qual você provavelmente já está familiarizado. É comumente usado vi
e possui recursos essencialmente idênticos ao s
comando desed
, embora alguns dos recursos avançados do regex possam variar de acordo com a implementação. Nesse caso, de ".com" até o final da linha é substituído por apenas ".com".
A barra vertical separa comandos seqüenciais a serem executados. Em muitas ex
implementações, você também pode usar uma -c
opção adicional , como:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
No entanto, isso não é requerido pelo POSIX.
O x
comando é encerrado após a gravação de quaisquer alterações no arquivo. Diferente do wq
que significa "gravar e sair", x
somente grava no arquivo se o buffer tiver sido editado. Portanto, se o seu arquivo não for alterado, o registro de data e hora será preservado.
.com
apenas em vez de remover tudo depois e incluindo o primeiro/
caractere? E se você tivesse um URL comoen.wikipedia.org/wiki/Ubuntu
na sua lista?