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 comandosedsubstitute, que se parece coms/old/new/, em queoldé 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,newestá 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.txtirá pegar o que achar no stdin e (a) salvá-lo no arquivofile.txtenquanto ao mesmo tempo (b) enviará para o stdout. Se desejar anexar afile.txtem vez de substituí-la, poderemos usartee -a file.txt, em que a opção-ainformaráteepara 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/'