ho una parola che devo cercare sempre nella stessa directory ed apro Catfish oppure Geany e seleziono "Cerca in Directory"
Il comando per cercare è:
Codice: Seleziona tutto
grep -nHIiE parola /home/utente/archivio/*
Codice: Seleziona tutto
grep -nHIiE parola /home/utente/archivio/*
Codice: Seleziona tutto
~/.bashrc
Codice: Seleziona tutto
cerca() {
grep -nHIiE "$1" /home/utente/archivio/*
}
Codice: Seleziona tutto
cerca parola
che per la precisione è una funzione, e infatti può accettare parametrigiusto, un alias...
Codice: Seleziona tutto
#!/bin/bash
[[ $# -lt 2 || ! -d $1 ]] && echo -e "List all text documents in the DIR path containing the string STR
USAGE:\t\t$(basename "$0") DIR STR [1]
\tDIR existing path where to start the search
\tSTR \"quoted string\" [Case insensitive]
\t1 option for NON-recursive search. Default: search all sub-directories
" && exit 2
[[ $3 = 1 ]] && depth="-maxdepth 1"
files=$(find "$1" $depth -type f 2>/dev/null)
while read f ; do
fileType=$(file -bL "$f" | grep -Eo "PDF|OpenDocument|UTF-8|ASCII|Microsoft|Windows")
case $fileType in
PDF)
if [ -x "$(which pdftotext)" ]; then
pdftotext "$f" - 2>/dev/null | grep -iq "$2" && echo -e "$f\t\t$fileType"
else
echo -e "pdftotext is not available.\nTry sudo apt-get install poppler-utils"
exit 1
fi
;;
OpenDocument)
if unzip -p "$f" content.xml | grep -iq "$2"; then
echo -e "$f\t\t$fileType"
fi
;;
UTF-8|ASCII)
grep -iq "$2" "$f" && echo -e "$f\t\t$fileType"
;;
Microsoft|Windows)
if [ -x "$(which unoconv)" ]; then
if [[ ${f#*.} =~ doc.?$ ]]; then
if unoconv -f txt --stdout "$f" | grep -iq "$2"; then
echo -e "$f\t\t$fileType"
fi
# else
# echo "[Info] skipping $f" # unoconv fails on non-Office MS files
fi
else
echo -e "unoconv is not available.\nTry sudo apt-get install unoconv"
exit 1
fi
;;
*)
;;
esac
done <<<"$files"
Codice: Seleziona tutto
grep -R Napoleone
Beh, messa così è semplice ma forse migliorabile. Probabilmente l'OP (e la maggior parte di chi cerca il/i file contenenti una certa stringa) troverebbe più utile avere elencati i file che contengono la stringa cercata, piuttosto che avere stampato tutto il contenuto. Quindi meglio usare grep -l path/* se ti basta il nome dei file interessati; oppure grep -nCx path/* per avere stampate le x righe precedenti e le x seguenti quella contenente la stringa (ogni riga preceduta nell'output dal nome del file e dal numero di riga nel file)OMBRA_Linux ha scritto: ↑giovedì 29 settembre 2022, 19:32E' molto semplice.
Supponiamo che nella cartella ( Documenti ) hai un file di testo chiamato ''Prova'' al quale al suo interno vuoi cercare la parola ( Napoleone ) basta aprire il Terminale all'interno della cartella Documenti e digitare il comando;
che a sua volta ti mostrerà l'intero testo del file con la parola '' Napoleone '' evidenziata.Codice: Seleziona tutto
grep -R Napoleone
Codice: Seleziona tutto
cerca() {
grep -nHIiE "$1" /home/utente/archivio/*
}
Codice: Seleziona tutto
cerca() {
grep -nHIiE "$1" "$2"/*
}
Codice: Seleziona tutto
cerca parola /home/utente/articoli
Codice: Seleziona tutto
cerca() {
if [[ $1 == 'f' ]]; then
grep -nHIiE "$2" /home/io/Documenti/fatture/*
elif [[ $1 == 'c' ]]; then
grep -nHIiE "$2" /home/io/Documenti/contratti/*
fi
}
Codice: Seleziona tutto
cerca f 1234567
Codice: Seleziona tutto
# ~/.bashrc: executed by bash(1) for non-login shells.
# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022
# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "$(dircolors)"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'
qui ci va la funzione postata prima
Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti