Bash: Ler Entrada Digitada com Análise de Separação em Matriz, Em seguida, Usar Elementos de Matriz 1 por 1 com Grep

0

O título praticamente diz isso. No momento, aceito uma série de linhas separadas e faço buscas separadas por cada uma delas. Agora quero ir para uma única linha, as guias usadas para separar campos, os campos em uma matriz e, em seguida, processar a matriz como elementos individuais para pesquisas separadas. Não familiarizado com o processamento através de um array no bash:

     #!/bin/bash
 while :
 do
   HOLD=""
   > ~/tmp 1
   while : 
   do
  read -p "Find What: " WHAT
  if [[ $WHAT = "" ]]
  then 
    break
  fi
  HOLD=$HOLD" "$WHAT
  echo $HOLD
  grep -riHn "$WHAT" --include="* chm" --include="* htm*" --include="* pb*" --include="* txt" >> ~/tmp 1
   done
   if [[ $HOLD = "" ]]
   then
  break
   fi
   sort -n ~/tmp 1 > ~/tmp 2;awk 'seen[$0]++ == 1' ~/tmp 2 |sed '/\/Trash\//d' > ~/tmp 1;cat ~/tmp 1|less
    
por Donald Darden 05.10.2015 / 10:12

1 resposta

0

Você pode usar

IFS=$'\t' read -p "Find What (TAB Separated): " -a WHAT

for QUERY in "${WHAT[@]}"
do
  echo $QUERY
done

para ler a entrada. O separador de campo de entrada (IFS) é definido como separador e a entrada é armazenada na matriz WHAT. $ {O QUE [@]} contém todos os elementos da matriz. A cotação é usada para evitar a nova análise dos campos pelo shell.

    
por user448115 05.10.2015 / 14:07