como copiar os resultados de um comando grep para a área de transferência do bash?

1

Se eu digitar algo em um terminal bash do Linux sem X, e então usar Ctrl + u, o que eu digitei será armazenado na pasta "clipboard" (por falta de um termo melhor), e eu posso digitar novamente Ctrl + y.

Como posso copiar os resultados de um comando grep em um arquivo de texto para essa prancheta bash? Por exemplo, se eu tiver um arquivo INSTALL assim:

./installprocedure --do-some-long-and-complicated-operation-on-dir dir1

Como posso copiar o conteúdo de um comando do grep para que esteja disponível fazendo Ctrl + y? Por exemplo:

copy content to bash clipboard "grep installprocedure INSTALL"  
Ctrl+y  
./installprocedure --do-some-long-and-complicated-operation-on-dir dir1 #cursor available here
    
por 719016 30.06.2011 / 16:24

2 respostas

2

Até onde eu sei, não há nenhuma maneira direta de alimentar o buffer interno bash , mas se o seu objetivo é ter a string na linha de comando para poder editá-la, pode ser feito utilizando dois recursos bash :

  1. Substituição de parâmetros (como mencionado por RedGrittyBrick ) e

  2. a readline function shell-expand-line :

    shell-expand-line (M-C-e)

    Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions.

Exemplo:

$ $(grep installprocedure INSTALL)Meta+Ctrl+e

Isso substituirá a linha de comando pelo resultado da substituição do comando.

Expandindo isso, você pode criar uma macro readline para fazer isso automaticamente em qualquer comando arbitrário, sem a necessidade de incluir em backticks ou $() :

$ bind '"\C-xs": "\C-a$(\C-e)\e\C-e"'

Pressionar Ctrl + X seguido de s moverá o cursor para o início da linha ( \C-a ), insira literalmente $( , mova para o fim da linha ( \C-e ), insira literalmente ) e, finalmente, chame shell-expand-line ( \e\C-e = Meta + Ctrl + e ).

Em outras palavras, ele substituirá a linha de comando por sua saída.

    
por 30.06.2011 / 22:01
1

Tem a certeza de que não pretende que a edição do histórico de comandos ? Ou talvez substituição de comandos ?

Histórico de comandos

No bash, pressione a tecla de seta para cima para recuperar o comando anterior. Você pode editar a linha da maneira usual.

Como alternativa, você pode consultar os comandos anteriores e partes de comandos anteriores usando a notação de ponto de exclamação.

Usando a saída de um comando como parâmetros para outro comando

 ./bar barparam 'grep foo foofile'

Usando a saída de um comando como entrada para outro comando

  grep foo foofile | ./bar barparam

Usando uma variável de shell como uma área de transferência nomeada

  clipboard = 'grep foo foofile'
  ./bar barparam $clipboard
    
por 30.06.2011 / 16:36