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