View previous topic :: View next topic |
Author |
Message |
Dexter2004 Tux's lil' helper
Joined: 23 Jul 2004 Posts: 123
|
Posted: Thu Oct 28, 2004 10:45 am Post subject: adicionar linhas a meio de um ficheiro |
|
|
Viva
eu estou a entar fazer um script (bash) para instalar um programa e preciso de inserir umas linhas a meio de um ficheiro se elas não existirem...
como posso fazer isto? quero ver se um ficheiro tem um determinada linha e se n tiver adicionala num determinado sitio...
desde ja agradeço |
|
Back to top |
|
|
xef Guru
Joined: 20 Jun 2003 Posts: 460 Location: Porto - Portugal
|
Posted: Thu Oct 28, 2004 12:09 pm Post subject: |
|
|
Para detectar se a linha existe podes fazer um grep, quanto a inserir a linha, usa o head e tail para passar para outro ficheiro as linhas até onde queres inserir, depois insere a nova linha nesse ficheiro e finalmente mais um head ou tail para copiar as restantes. No fim, moves o novo ficheiro para cima do antigo.
Esta é uma forma, provavelmente há algo melhor, talvez o awk faça isso, mas esse não sei usar. |
|
Back to top |
|
|
Dexter2004 Tux's lil' helper
Joined: 23 Jul 2004 Posts: 123
|
Posted: Thu Oct 28, 2004 12:46 pm Post subject: |
|
|
muito obrigado...
ja agora como se usa o head e o tail? |
|
Back to top |
|
|
xef Guru
Joined: 20 Jun 2003 Posts: 460 Location: Porto - Portugal
|
Posted: Thu Oct 28, 2004 1:19 pm Post subject: |
|
|
head [OPTION] [FILE]
-n, --lines=NUMBER
print first NUMBER lines instead of first 10
ou seja, head -l 20 ficheiro
mostra as primeiras 20 linhas
o tail é a mesma coisa mas para as ultimas linhas.
head -l 20 ficheiro
mostra as ultimas 20 linhas
Recomendo uma leitura de mal head e mal tail |
|
Back to top |
|
|
Dexter2004 Tux's lil' helper
Joined: 23 Jul 2004 Posts: 123
|
Posted: Thu Oct 28, 2004 3:34 pm Post subject: |
|
|
muito obrigado...
so mais uma coisa: é possivel procurar um linha num ficheiro e se a linha for encontrada devolver o numero dessa linha? |
|
Back to top |
|
|
xef Guru
Joined: 20 Jun 2003 Posts: 460 Location: Porto - Portugal
|
Posted: Thu Oct 28, 2004 4:07 pm Post subject: |
|
|
Se não houver outra forma podes usar um comando que numera as linhas de um ficheiro (não me lembro o nome), quando o grep apanhar a linha usas o tr para ir buscar a primeira coluna. |
|
Back to top |
|
|
fernandotcl Veteran
Joined: 20 Nov 2003 Posts: 1396 Location: Sao Paulo, Brazil
|
Posted: Thu Oct 28, 2004 10:02 pm Post subject: |
|
|
Dexter2004 wrote: | é possivel procurar um linha num ficheiro e se a linha for encontrada devolver o numero dessa linha? |
Sim, você pode fazer, por exemplo, um cat -n:
Code: | cat -n | grep <...> | awk '{print $1}' |
_________________ RTFM! |
|
Back to top |
|
|
Dexter2004 Tux's lil' helper
Joined: 23 Jul 2004 Posts: 123
|
Posted: Fri Oct 29, 2004 12:18 am Post subject: |
|
|
muito obrigado... |
|
Back to top |
|
|
fernandotcl Veteran
Joined: 20 Nov 2003 Posts: 1396 Location: Sao Paulo, Brazil
|
Posted: Fri Oct 29, 2004 1:02 am Post subject: |
|
|
Dexter2004 wrote: | Porque é que quando faço numa linha de comandos
Code: |
head -n 5 nome_do_ficheiro >> novo_ficheiro
|
fica tudo bem
mas quando faço num script
Code: |
echo `head -n 5 nome_do_ficheiro >> novo_ficheiro`
|
fica tudo na mesma linha.. |
Eu acho que o echo ignora quebras de linha sem uma determinada opção. Em todo caso, bastaria fazer "head -n 5 <arquivo1> >> <arquivo2>", mesmo no script.
Pra ver quantas linhas, use o wc. _________________ RTFM! |
|
Back to top |
|
|
Dexter2004 Tux's lil' helper
Joined: 23 Jul 2004 Posts: 123
|
Posted: Fri Oct 29, 2004 1:06 am Post subject: |
|
|
ja tinha visto por isso é que tinha editado o post.
mas de qualquer maneira mais uma vez muito obrigado... |
|
Back to top |
|
|
|