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.