Como faço para substituir um com o na segunda linha e, em seguida, continuar o pipeline?
Primeiro, corrija o sed para corresponder a todos os a s, evento como início e fim.
sed -r -e 's/(^| )a($| )/the/g'
Em seguida, faça corresponder apenas na linha 2
sed -r -e '2 s/(^| )a($| )/the/g'
Agora você pode fazer
echo -e 'Going to the movies can be fun.
When a dog found a cat a trouble began.
Do not text while driving please.' | sed -r -e '2 s/(^| )a($| )/the/g' | less
Outra solução
Primeiro, solte o cat
cat está abrindo um arquivo e passando para sua saída, que é então canalizada para o próximo comando. Podemos obter o shell para abrir um arquivo e direcioná-lo para a entrada do próximo comando (agora primeiro), usando o redirecionamento de entrada ( < ). Podemos escrever isso como command args <input-file ou <input-file command args . Não importa onde dentro do comando nós colocamos o <input-file . Eu coloquei o redirecionamento primeiro, para que a linha do tubo possa ser lida da esquerda para a direita.
< example head -2 | tail -1 | sed 's/ a / the /g'
Alternativa (que faz exatamente a mesma coisa):
head -2 <example | tail -1 | sed 's/ a / the /g'
eles fazem o mesmo que o seguinte, mas com um processo a menos.
cat example | head -2 | tail -1 | sed 's/ a / the /g'
Próximo encapsulado: aqui colocamos parênteses em torno de 3 comandos, podemos então canalizar a saída de todos os 3 para outro comando (aqui eu uso menos).
{
< example head -1
< example head -2 | tail -1 | sed 's/ a / the /g'
< example tail -1
} | less