Eu estou querendo saber se existe uma maneira simples de operar em certas linhas com números de linha pré-atribuídos.
Digamos que eu queira gerar a 1ª, 7ª, 14ª e 16ª linhas de um arquivo, posso simplesmente fazer
sed -n '1p;7p;14p;16p' input_file
mas isso fica mais complicado quando a operação não é apenas imprimir, e eu não quero escrever o mesmo comando longo 4 vezes (e sim, eu sei que posso construir esse comando sed longo substituindo a mesma variável bash 4 vezes, mas isso não é ideal o suficiente ...), ou seja
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
Existe uma maneira de fazer a operação nessas linhas específicas do meu arquivo? Estou esperando algo como,
sed -n '1,7,14,16p'
que certamente não funcionará na forma atual.
Qualquer ajuda será apreciada. "Não, não é possível." com explicações também é uma resposta que aceitarei.
Você pode usar ramificações:
(observe que você também pode adicionar alguns
20,25b1
intervalos de linha ou/re/b1
incluir linhas que correspondam are
).Ou você pode usar
awk
:Ou usando um hash:
(ou
BEGIN{lines[1]lines[7]lines[14]lines[16]}
se não forem muitos)Simplesmente inverta sua seleção e exclua-a:
Primeira variante:
Você pode usar este truque:
teste
Resultado
Segunda variante:
No início, o auxiliar
sed
é usado para filtrar apenas as linhas necessárias do arquivo, então essas linhas são canalizadas para o principalsed
com o comando longo.