Eu tenho um script que corresponde a uma string em um diretório do número de arquivos de log conforme abaixo:
#!/bin/sh
# Collect Customer ID as input
read -p "Enter Customer ID: " custid
echo "Searched customer ID $custid found in following logs: "
# Find the customer id as string in specified directory
find /usr/local/tomcat9/logs/ -type f -exec grep -l "$custid" {} \;
Isso gera uma lista de arquivos de log que contém a string pesquisada. Por exemplo:
Enter Customer ID: 2001NM-100313
Searched customer ID 2001NM-100313 found in following logs:
/usr/local/tomcat9/logs/localhost_access_log.2017-10-04.txt
/usr/local/tomcat9/logs/localhost_access_log.2017-07-11.txt
/usr/local/tomcat9/logs/localhost_access_log.2017-11-02.txt
/usr/local/tomcat9/logs/localhost_access_log.2017-09-11.txt
/usr/local/tomcat9/logs/localhost_access_log.2017-08-09.txt
/usr/local/tomcat9/logs/localhost_access_log.2017-06-11.txt
Eu quero esta saída como lista como:
1. /usr/local/tomcat9/logs/localhost_access_log.2017-10-04.txt
2. /usr/local/tomcat9/logs/localhost_access_log.2017-07-11.txt
3. /usr/local/tomcat9/logs/localhost_access_log.2017-11-02.txt
4. /usr/local/tomcat9/logs/localhost_access_log.2017-09-11.txt
5. /usr/local/tomcat9/logs/localhost_access_log.2017-08-09.txt
6. /usr/local/tomcat9/logs/localhost_access_log.2017-06-11.txt
E vai pedir o número 1/2/3/4/5/6 para inserir que vai abrir aquele arquivo numerado, ou seja; se eu pressionar 4, ele enviará o comando
vim /usr/local/tomcat9/logs/localhost_access_log.2017-09-11.txt
e a string "2001NM-100313" será pesquisada em todo o arquivo.
Meu objetivo é ler toda a linha/linhas (pode haver várias linhas com a string) que contêm essa string dos arquivos de log, pode haver vários arquivos de log que possuem essa string com várias datas, preciso selecionar qualquer arquivo datado e leia o registro.
Basta usar
select
(obash
builtin).Então o código que você quer é provavelmente:
Observe que, se seus nomes de arquivo contiverem espaços em branco, isso será interrompido. Veja também:
No entanto, se você chamar o
select
built-in diretamente defind
, isso manipulará os espaços em branco com facilidade. Portanto, o seguinte é realmente melhor em todos os casos em que consigo pensar:Ler sua pergunta me lembrou de sempre querer ter um script simples que tornasse mais fácil para mim pesquisar arquivos por uma string específica e, em seguida, examinar um dos arquivos que contêm a string. Com base no seu script e na sugestão da saga de usar um array, criei meu script e também finalizei o seu. :)
Observação: este script é /bin/bash, não /bin/sh, porque não sei como fazer o array funcionar em /bin/sh...
Seu roteiro:
EDIT: Embora o script acima funcione perfeitamente bem para a pergunta original, desenvolvi a resposta do Wildcard, para que meu script possa lidar com arquivos com espaços vazios e oferece várias ferramentas para abrir o arquivo selecionado.
meu roteiro: