sed -i 1,10d A.txt apaga as linhas de 1 a 10 de A.txt , mas não imprime nada. cat do arquivo depois (mesmo dentro da mesma sub-casca) imprime o modificado conteúdo do arquivo, não o original.
Eu tenho um arquivo com o nome A.txt Eu tenho que criar um arquivo B.txt tal que tenha algum texto escrito em iniciar, com um símbolo de pipeline, além disso, seguindo com o não de linhas no arquivo A (10 linhas aqui neste exemplo) e, em seguida, o conteúdo do arquivo A .
Observação: tenho que fazer isso com a maior facilidade possível em um único comando de linha.
Saída:
Some text | 10
(Contents of file A)
Eu tentei isso (sem incluir o símbolo do pipeline), mas não funcionou:
(echo 'Some Text';
sed -i 1,10d A.txt ;
wc -l A.txt ;cat A.txt)
>> B.txt
sed -i 1,10d A.txt apaga as linhas de 1 a 10 de A.txt , mas não imprime nada. cat do arquivo depois (mesmo dentro da mesma sub-casca) imprime o modificado conteúdo do arquivo, não o original.
Se houver apenas 10 linhas em A.txt e você excluir essas linhas com sed , as seguintes cat A.txt não terão saída e wc reportará 0 linhas.
Você provavelmente quer algo como:
(
echo "Some text | $(wc -l < A.txt)"
cat A.txt
) > B.txt
lines=$( wc -l A.txt ) ; printf "Some Text | %s\n" ${lines%% *} > B.txt ; cat A.txt >> B.txt
A saída de wc inclui o nome do arquivo, portanto, ele precisa ser removido, o que é feito usando o recurso de remoção do sufixo nativo do shell ${var%%glob} .
Eu tenho uma preferência pessoal para usar como padrão printf em vez de echo porque echo tem casos em que se comporta mal.
Realizar o redirecionamento de saída duas vezes garante que o arquivo de saída não inclua dados de uma execução anterior do one-liner; o primeiro redirecionamento > sobrescreve qualquer versão anterior.
Tags sed