Newsgroup: it.comp.os.linux.iniziare
Titolo: grep: pattern da file

per riordinare un po' il mio file .history e ridurne le dimensioni, avevo 
pensato, usando grep, di adoperare questo comando:
grep -f lista.txt -v < /root/.history > /mnt/sda5/comandi_programmi/
history_ordinato.txt
nel file lista.txt avevo digitato i nomi dei comandi le cui linee 
associate andavano individuate (e con l'opzione -v, invertendo il 
riscontro, grep avrebbe dovuto produrmi, come output, solo le linee che 
non contenevano quei nomi, così da snellire il file .history)
potrace
mkbitmap
cr2v
kvec
nconvert
zip 
pdftk 
history 
pdfinfo 
pdffonts 
mount 
umount 
ma mi viene prodotto un file vuoto. sicuramente c'è qualcosa che non 
arrivo a capire
il manuale dice:
-f  pattern_file
    Read one or more patterns from the file named by the pathname 
pattern_file. Patterns in pattern_file shall be terminated by a <newline>.
ho provato aggiungendo: \n
potrace \n
mkbitmap \n
cr2v \n
ecc...
ma nulla
neppure aggiungendo l'opzione -E
-- 
Puppy Linux wiki:  
http://puppylover.netsons.org/dokupuppy
Puppy Linux Forum: 
http://puppylinux.ilbello.com
Windows me genuit, Ubuntu rapuere / tenet nunc Puppy Linux...

 ...
A che scopo?
Lo storico dei comandi serve come documentazione; basta 
fare backup regolari, comprimerli e conservarli in un posto
sicuro. Se invece i tuuoi scopi sono altri, stai sbagliando qualcosa.


 ...
Dovendo trattare molte stringhe fisse in parallelo io userei
fgrep (o l'opzione -F), ma passiamo avanti.
Prima di tutto apri il file dei pattern con un editor 
esadecimale, poi vedi il codice di uscita di grep con 
"echo $?", controlla i permessi dei file e delle directory,
 la codifica dei caratteri ed il locale. Infine, se non 
risolvi, posta tutti i file.

history_ordinato.txt
Guarda io sono un patito dell'history.. ti regalo 2 cose.
1. Per sistemare l'hustory gia' esistente.
Ho fatto questo script "hist" e l'ho messo in ~/bin, ti basta
dare il comando: "hist --help" e vedi cosa fa, oppure: hist e
ti ripulisce l'history facendo prima il backup dell'originale
nella directory ~/HIST da creare prima da parte tua.
======================
#!/bin/bash
# Copia l`history della propria home come bkp nella directory HIST
# della propria home col nome della sola data; quindi crea in HIST il
# file con la stessa data piu` l'estensione .sort; infine sovrascrive
# l`history con quest`ultimo e dice Ok.
# Ma devo cambiarlo facendolo - se ci riesco - SENZA sort
if [ "$1" = "--help" ]; then
echo; cat $0
echo
else
cp $HOME/.bash_history $HOME/HIST/`date +"%b-%y"` && \
sort -u $HOME/HIST/`date +"%b-%y"` >$HOME/HIST/`date +"%b-%y"`.sort && \
cp $HOME/HIST/`date +"%b-%y"`.sort $HOME/.bash_history && \
echo
echo '   -- tutto OK,  .bash_history ripulito'
echo
fi
================================
2. Per il futuro.
Come vedi non mi andava di perdere l'odine dei comandi, ma
non l'ho piu' guardato perche' ora con la lenny o meglio con
l'ultima versione di bash:
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
c'e' la possibilita' di NON duplicare nessun comando, cioe'
l'history resta scritta gia' tutta ripulita.
Ecco le righe, io le ho messe in /etc/profile cosi' sono
per tutti anche per root (le trovi in man bash).
==============================
export HISTSIZE=500000
export HISTCONTROL=erasedups
shopt -s histappend
======================
Ps. Se c'hai il login grafico non lo so come funziona il
logout e lo shutdown, perche' da me lo da' root da console,
e tutti gli altri utenti (son sempre solo io eh) sono gia'
tutti sloggati per cui l'history e' gia' stata "appesa".
Per l'history di root puoi dare "history -a" prima di
shutdown -h now, ma forse lo farebbe gia' lo stesso per
l'opzione histappend che c'e' qui su, basta provare.
-- 
Saluti, Dalet

 export HISTCONTROL=erasedups
[...]
guardando in /etc/profile ho scoperto di avere:
export HISTCONTROL=ignoredups
che faccio, lo rimpiazzo con: 
export HISTCONTROL=erasedups
o possono coesistere?


 arrivo a capire
  Il file /root/.history è proprio quello giusto?  Perché a me funziona:
$ wc -l .bash_history
1004 .bash_history
$ grep ' ls ' .bash_history | wc -l
2
$ grep '^xauth' .bash_history | wc -l
6
$ cat file
 ls
^xauth
$ grep -f file -v < .bash_history | wc -l
996
  Ciao,
-- 
Alessandro Selli 
http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Chiave PGP/GPG key: EC885A8B

 grep -f file -v < .bash_history | wc -l 996
[...]
non hai effettuato il reindirizzamento dell'output su un altro file però 
vedo che contandole le righe sono di meno in effetti, se dò io il comando 
mi viene zero
grep -f lista.txt -v < /root/.history | wc -l
0
se invece elimino il parametro -v
# grep -f lista.txt < /root/.history | wc -l
4224
non capisco; e devo ancora fare tutte quelle altre verifiche richieste 
nell'altro post


o possono coesistere?
Non possono, e' una variabile e prende solo l'ultimo scritto.
Guarda che pero' NON devi mettere "shopt -s histappend", era
commentato e m'ero scordato. Se lo metti ti ritrovi tutti
i duplicati.
-- 
Saluti, Dalet

 la codifica dei caratteri ed il locale
[...]
la codifica dei caratteri del file di pattern è UNICODE UTF-8
le impostazioni locali:
ISO-8859-1


 ISO-8859-1
Hai settato UTF ed usi una tabella ASCII.  qualcosa non va