Posso usar uma variável do Bash em um comando sed? [duplicado]

1

Estou tentando executar um comando sed com a opção "-n".

for i in 1 2 3 4 5 ; do maas maas nodes list | grep hostname | cut -d\" -f4 | sed -n '$ip'; done

Eu quero que ele execute sed -n '1p' , em seguida, sed -n '2p' e assim por diante.

Alguma ideia?

    
por user312453 05.08.2014 / 09:00

1 resposta

2

Você deseja substituir $ i em $ip por sua variável shell? Use aspas duplas

... | sed "$ip" ...

Isso tem certas implicações. Não se aplica aqui , mas você pode ter que escapar de coisas que você não precisaria em aspas simples.

Mas eu também considero reescrever isso, então você não está executando os mesmos comandos n vezes para imprimir as primeiras linhas n (que é o que isso faz). Aqui estão algumas alternativas ...

Usando head :

maas maas nodes list | grep hostname | cut -d\" -f4 | head -5

Armazenando a saída do comando:

output=$(maas maas nodes list | grep hostname | cut -d\" -f4)
for i in 1 2 3 4 5; do
    sed -n "$ip"
done

Criando uma string sed melhor:

maas maas nodes list | grep hostname | cut -d\" -f4 | sed -n $(printf "%dp;" {1..5})

Role todo o seu código de busca / corte em um awk :

maas maas nodes list | awk -F'"' '/hostname/ && i<5 {i++; print }'

Eu sou um fetichista awk , então provavelmente vou pelo último.

    
por Oli 05.08.2014 / 10:45