Como posso salvar linhas do terminal em um arquivo de texto?

0

Eu fiz um script bash simples que empacota um arquivo e, em seguida, carrego, se está tudo bem, eu estou recebendo alguns http: // links para minhas coisas como saída Eu quero saber como posso copiar esses links automaticamente para um arquivo ou variável? Também estou recebendo algumas linhas que não estão começando com http: // mas com # por exemplo, como posso excluí-las e adicionar linhas em branco neste local?

    
por John 02.11.2014 / 19:59

1 resposta

5

Para capturar saída de script em um arquivo, use:

script.sh >file.txt

Para remover comentários (linhas que começam com # ), mas deixar o espaço em branco em seu lugar, use:

script.sh | sed 's/^#.*//' >file.txt

Para fazer todos os itens acima e também exibir as informações no terminal, use:

script.sh | sed 's/^#.*//' | tee file.txt

Explicação

  • > é o símbolo do shell para redirecionamento. Ele diz ao shell para fazer o que quer que seja stdout e redirecionar para o arquivo nomeado.

  • sed é um utilitário de edição linha a linha. Aqui, usamos o comando sed substitute, que se parece com s/old/new/ , em que old é qualquer expressão regular. No nosso caso, old é ^#.* onde ^ corresponde no início de uma linha, # corresponde ao símbolo de hash e .* é um curinga para corresponder a qualquer um dos itens a seguir. No nosso caso, new está vazio. Assim, sed 's/^#.*//' substitui as linhas que começam com # por uma linha em branco.

  • tee é um utilitário usado para fazer uma cópia da stdout. tee file.txt irá pegar o que achar no stdin e (a) salvá-lo no arquivo file.txt enquanto ao mesmo tempo (b) enviará para o stdout. Se desejar anexar a file.txt em vez de substituí-la, poderemos usar tee -a file.txt , em que a opção -a informará tee para acrescentar.

Refinamentos

Adicionando texto de outro arquivo .txt no início deste arquivo.txt

Para colocar o conteúdo de first.txt no início de file.txt :

{ cat first.txt; script.sh; } >file.txt

Copie apenas as linhas que começam com http: //

Para selecionar linhas de acordo com algum padrão sem modificá-las, grep é a ferramenta certa:

script.sh | grep '^http' >file.txt

Copiando da primeira linha com http: // *

sed permite selecionar um intervalo de linhas. Aqui, usamos o intervalo /^http/,$ , em que /^http/ é a primeira linha encontrada que começa com http e $ é o símbolo da sed para a última linha na entrada. p informa sed para imprimir linhas que correspondam a esse intervalo:

script.sh | sed -n '/^http/,$ p'

Combine Adicionando texto de outro arquivo e copiando da primeira linha com http: // *

{ cat first.txt; script.sh; } | sed -n '/^http/,$ p' >file.txt

Adicione uma linha em branco depois de cada linha que começa com http

Aqui usamos sed novamente. Quando encontramos uma linha que começa com http , adicionamos uma nova linha \n ao final dessa linha:

script.sh | sed  's/^http.*/&\n/'
    
por John1024 02.11.2014 / 20:05