sed '/[^0-9]/d;s/.$/&p/' <input.txt |
sed -nf - file
Isso é dois sed
s trabalhando juntos. O primeiro faz uma pequena tentativa de garantir que ele apenas edite linhas apropriadas, recusando-se a imprimir qualquer linha que contenha um único caractere não numérico e apenas editando quaisquer linhas contendo pelo menos um caractere. Basicamente, seu trabalho, no entanto, é transformar sua lista de números de linha em:
2088p
2089p
2095p
2096p
O segundo lê seu script de comando a partir da entrada padrão e não imprime linhas por padrão, então todas essas linhas editadas por sed
se tornam uma lista de comandos para o sed
o segundo. Ele executa esses comandos em file
.
Aparentemente, uma técnica semelhante já foi recomendada, mas existe uma diferença fundamental entre os argumentos de invocação e a entrada de um processo. Existem limites distintos nas listas de discussão como:
some_process $(seq a billion)
Esse tipo de coisa está fadado ao fracasso, mas, desde que o processo saiba como lidar com isso, sua entrada é teoricamente ilimitada. Portanto, nesse caso, sed
lê um arquivo - o |pipe
- como entrada e o processa como um script sed
, o que é muito diferente de entregá-lo a uma cadeia do mesmo comprimento em sua linha de comando na invocação. / p>