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 comandosed
substitute, 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,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 arquivofile.txt
enquanto ao mesmo tempo (b) enviará para o stdout. Se desejar anexar afile.txt
em vez de substituí-la, poderemos usartee -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/'