Suponha que eu tenha uma lista de URLs em um arquivo de texto:
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
Quero excluir tudo o que vem depois de '.com'.
Resultados esperados:
google.com
unix.stackexchange.com
isuckatunix.com
eu tentei
sed 's/.com*//' file.txt
mas também foi excluído .com
.
text-processing
sed
Koshur
fonte
fonte
.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?Respostas:
Para excluir explicitamente tudo o que vem depois de ".com", basta ajustar sua solução sed existente para substituir ".com (qualquer coisa)" por ".com":
Ajustei seu regex para escapar do primeiro período; caso contrário, seria semelhante a "thisiscommon.com/something".
Observe que você pode ancorar ainda mais o padrão ".com" com uma barra à direita, para não aparar acidentalmente algo como "sub.com.domain.com/foo":
fonte
Você pode usar
awk
o separador de campos (-F
) da seguinte maneira:Explicação:
Como você deseja excluir todas as coisas depois
.com
,-F '.com'
separa a linha.com
eprint $1
fornece a saída apenas a parte anterior.com
. Assim,$1".com"
adiciona.com
e fornece a saída esperada.fonte
/
como FS e entrar no primeiro campo?acomercial.com/asdsad
A melhor ferramenta para edição in-loco de arquivos não interativa é
ex
.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 prepararex
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 a1,$
— 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 usadovi
e possui recursos essencialmente idênticos aos
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:No entanto, isso não é requerido pelo POSIX.
O
x
comando é encerrado após a gravação de quaisquer alterações no arquivo. Diferente dowq
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.fonte
sed
o falso Gnu -i. Ele lê / grava em buffers no disco. Veja você mesmo comex -r
opreserve
comando.preserve
comando?Maneira python muito rápida, simples e suja:
Amostra de execução
fonte
.com
, apenas remove tudo que começa com o primeiro/
da linha. (que na minha opinião é mesmo a melhor abordagem!).net
, em outras abordagens, a parte que vem depois do domínio e da extensão não seria excluída, portanto, é mais seguro usá-lo/
como separador.