adiciona uma linha como primeira ou segunda linha de um arquivo, dependendo do conteúdo

1

Eu quero adicionar uma linha como primeira linha de muitos arquivos, a menos que a primeira linha de um arquivo seja um shebang, caso em que deve ser o segundo.

    
por davka 24.01.2018 / 15:58

2 respostas

5

Existem muitas maneiras de fazer isso ... por exemplo,

sed '1!b
/^#!/a\
one_line_text
//!i\
one_line_text' infile

Observe que as barras invertidas (se houver) em sua linha precisam ter escape (por exemplo, \ se torna \ ).
Isso não irá editar arquivos vazios. Além disso, isso não irá editar o arquivo no local. Consulte seu manual sed para ver se ele suporta -i para editar o arquivo no local (e verifique a sintaxe dessa opção).

    
por 24.01.2018 / 16:13
2

No script abaixo, se a linha 1 for shebang line, ela inserirá novo conteúdo em 2 linhas Caso contrário, ele irá inserir conteúdo na primeira linha

Testado e trabalhado bem

#!/bin/bash
if [[ 'awk 'NR==1 && $1 == "#!/bin/bash" {print $1}' file' == "#!/bin/bash" ]]
then
sed '2i content' file
else
sed '1i content' l.txt
fi
    
por 24.01.2018 / 20:27