Imprime as linhas 2 e 7 para um arquivo usando 'sed'

0

Eu tenho um diretório de arquivos .txt. Para cada um, eu gostaria de pegar a segunda e a sétima linha, e adicionar essas linhas a outro arquivo, que eu nomeei arbitrariamente list.index. Não sei como dizer ao sed sobre o nome do arquivo atual, dentro do loop for, então o que eu tenho abaixo não funciona ainda.

#!/bin/sh
for i in *.txt
do
sed -n -e '2p' -e '7p' list.index
done
    
por Dylan Kinnett 11.01.2014 / 17:35

2 respostas

4

No seu caso, você disse a sed que imprime a segunda e a sétima linha do arquivo list.index , não adicione essas linhas a ele.

Tente isto:

#!/bin/sh
for i in *.txt
do
    sed -n -e '2p;7p' < "$i" >> list.index
done

Ele imprimirá a segunda e a sétima linhas de cada arquivo .txt , depois as adicionará a list.index .

    
por 11.01.2014 / 17:47
0

Note que você pode dizer a sed para parar de ler depois de ler a sétima linha, não faz sentido manter a leitura depois disso:

#! /bin/sh -
for i in *.txt; do
  sed -e 2b -e 7q -e d < "$i"
done > list.index

(ou sed '7q;2!d' < "$i" mais curto mas ligeiramente menos legível)

    
por 11.01.2014 / 21:47