Adiciona o padrão à enésima linha, se o arquivo tiver linhas (n-x) [RHEL6]

0

O seguinte comando adicionará um padrão à quarta linha.

sed -i '4i pattern' file

Mas não está funcionando se eu tiver menos de quatro linhas no arquivo. O requisito é que eu preciso adicionar o padrão na quarta linha com linhas de prefixo vazias.

Resultado esperado: cat -n file

1  line1
2
3
4  pattern

Versão do GNU sed 4.2.1

    
por EBIN GLADSON 07.09.2018 / 14:37

3 respostas

1

Você pode preencher o arquivo com algumas linhas em branco para garantir que haja pelo menos quatro linhas:

{ cat file; echo; echo; echo; } | sed -e '4i pattern' 

Se você deseja aparar as linhas em branco à direita, você pode canalizar isso para:

| sed -n 'H; ${g; s/^\n//; s/\n\+$//; p}' 

ou

| tac | awk '/./{p=1}p' | tac 

Ou adicionando apenas o número mínimo de linhas em branco:

{ cat file; for ((i=$(wc -l <file); i<3; i++)); do echo; done; } | sed '3a pattern'

Observe que o programa sed foi alterado para acrescentar após a linha 3, em vez de inserir antes da linha 4.

    
por 07.09.2018 / 15:14
1
while [ $(wc -l <file) -lt 4 ] ; do
    echo >> file
done
sed -i '4i pattern' file
    
por 07.09.2018 / 15:26
0

Verifique se file tem linhas suficientes com wc -l (contando linhas).

Exibir um aviso se o arquivo não tiver linhas suficientes.

[ $(cat file | wc -l) -ge 4 ] && sed -i '4s pattern' file || echo "not enough lines"
    
por 07.09.2018 / 14:41

Tags