Como transformar o comando Diff em script bash com prompt

0

Eu tenho uma lista que copiei e quero colá-la no shell para me dar apenas as linhas repetidas.

1

1

3

2

Quando leio sobre os comandos do bash, eu já fiz isso:

cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)

Quando escrevo o comando acima eu colo minha lista e pressiono CTRL+Z para parar o gato e ele mostra as linhas repetidas. Eu não quero comparar arquivos, apenas colei a entrada de várias linhas.

Agora, à pergunta: Existe alguma maneira de transformar esse comando em script? Porque quando eu tento fazer isso como um script e CTRL+Z pára.

PS: Por favor não ria. Este é o meu primeiro momento tentando. Até agora apenas lendo. :)

    
por NIZ 29.05.2015 / 16:36

2 respostas

1
#!/bin/bash

while :
do
  echo Paste some input, then press Control-D:
  cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
done
    
por 02.06.2015 / 03:04
1

O primeiro problema é o controle Z, em uma configuração padrão, ele suspende o trabalho, deixando em segundo plano não rodando. Você vai notar isso com a saída, que vai dizer que você parou de emprego. (outros comandos de controle de trabalho também podem) O que você queria era o Controle D que, quando digitado em um terminal, envia um Fim de Arquivo. Isso é muito diferente dos dos e das janelas.

Em segundo lugar, quando você vê cat em um script, 90% do tempo não é necessário. Existem três maneiras de fazer o que você está tentando fazer sem o uso do gato que vem ao topo da minha cabeça:

  1. tee tee /tmp/sortme | sort | diff - <(sort -u /tmp/sortme) você também pode substituir o arquivo temporário por um link nomeado.

  2. usando uniq -d sort | uniq -d

  3. xclip que permite acessar a área de transferência a partir da linha de comando para que você não precise enviar um EOF. Ele também pode ser combinado com as duas opções anteriores para que todas as quatro linhas façam o que você deseja.

    xclip -o > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
    diff <(xclip -o|sort) <(xclip -o|sort -u)
    xclip -o|tee  /tmp/sortme | sort | diff - <(sort -u /tmp/sortme)
    xclip -o|sort | uniq -d
    
por 02.06.2015 / 04:43