Como posso aplicar a substituição de caracteres ao meu enésimo último comando?

3

Eu regularmente me vejo tendo que executar um longo comando em um arquivo, em seguida, processar os resultados com outros comandos. Para processar o próximo arquivo, eu costumo executar novamente o mesmo comando apertando a tecla Acima até encontrar o comando que eu quero e arduamente substituir o nome do arquivo antigo pelo novo nome do arquivo.

Existe uma maneira de combinar substituição de caret ( ^oldfile^newfile ) com o último comando n ? Eu tentei (sem sucesso) canalizar o n th-último comando para a substituição da seguinte forma:

$ !-4 | ^old^new

Claro, estou aberto a outras sugestões. Esses pequenos atalhos realmente ajudam na produtividade ...

    
por Zaid 22.08.2010 / 21:39

2 respostas

5

Você não pode fazer isso com uma substituição rápida diretamente, porque ^foo^bar é uma abreviação para:

!!:s/foo/bar/

A parte !! (que se refere ao último comando) não faz parte da sintaxe rápida (é isso que a torna rápida), mas você pode usar a sintaxe mais longa diretamente e modificar o !! para o que você quiser:

!-4:s/foo/bar/

Eu expliquei o quanto da sintaxe da história como eu sei em este post ; a última seção inclui o modificador :s

    
por 22.08.2010 / 22:21
0

Você pode escrever um longo comando como uma função de shell que usa um nome de arquivo como parâmetro e, em seguida, basta digitar function filename quando precisar.

    
por 22.08.2010 / 21:49