A melhor ferramenta para edição de arquivos não interativos no local é ex
.
ex -sc '%s/\(\.com\).*// | x' file.txt
Se você usou vi
e se você 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 forma são extensões Vim (por exemplo, :bufdo
) e não estão definidos no Especificações do POSIX para ex
, mas essas especificações permitem um grau verdadeiramente surpreendente de poder e flexibilidade na edição de texto não visual (seja interativo ou automatizado).
O comando acima tem várias partes.
-s
ativa o modo silencioso para preparar ex
para uso em lote. (Suprimir mensagens de saída et al.)
-c
especifica o comando a ser executado quando o arquivo ( file.txt
, neste caso) é 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 em vi
e tem recursos essencialmente idênticos ao comando s
de sed
, embora alguns dos recursos avançados de regex possam variar de acordo com a implementação. Neste caso, de ".com" até o final da linha é substituído por apenas ".com".
A barra vertical separa os comandos sequenciais a serem executados. Em muitas (%) implementações ex
você também pode usar uma opção -c
adicional, assim:
ex -sc '%s/\(\.com\).*//' -c x file.txt
No entanto, isso não é exigido pelo POSIX.
O comando x
sai, depois de gravar qualquer alteração no arquivo. Ao contrário de wq
, que significa "escrever e sair", x
apenas grava no arquivo se o buffer tiver sido editado. Assim, se seu arquivo estiver inalterado, o registro de data e hora será preservado.