Ho un file in cui voglio grep per le righe che iniziano con -rwx o drwx E terminano con qualsiasi numero.Grep per inizio e fine riga?
Ho questo, ma non è giusto. Qualche idea?
grep [^.rwx]*[0-9] usrLog.txt
Ho un file in cui voglio grep per le righe che iniziano con -rwx o drwx E terminano con qualsiasi numero.Grep per inizio e fine riga?
Ho questo, ma non è giusto. Qualche idea?
grep [^.rwx]*[0-9] usrLog.txt
La parte difficile è un'espressione regolare che include un trattino come uno dei caratteri validi in una classe di caratteri. Il trattino deve venire immediatamente dopo l'inizio per una classe di caratteri (normale) e immediatamente dopo il punto di inserimento per una classe di caratteri negata. Se hai bisogno anche di una parentesi quadra chiusa, hai bisogno della parentesi quadra chiusa seguita dal trattino. Per fortuna, hai solo bisogno di un trattino, quindi la notazione scelta.
grep '^[-d]rwx.*[0-9]$' "[email protected]"
See: Regular Expressions e grep per i dettagli POSIX-standard.
Probabilmente vuoi egrep. Prova:
egrep '^[d-]rwx.*[0-9]$' usrLog.txt
Sembra che tu eri sulla strada giusta ... Il personaggio ^
partite inizio-of-line, e $
partite di fine linea. Lo schema di Jonathan funzionerà per te ... volevo solo darti la spiegazione dietro di esso
Non del tutto sulla buona strada, però. È significativo notare che i caratteri all'interno di una classe di caratteri '[]' si comportano in modo significativamente diverso rispetto a quello che avrebbero in altre parti della regex. – ephemient
stai analizzando l'output di ls -l
?
Se lo siete, e si desidera solo per ottenere il nome del file
find . -iname "*[0-9]"
Se non hai scelta perché usrLog.txt è stato creato da qualcosa/qualcun altro e si deve assolutamente utilizzare questo file, le altre opzioni includere
awk '/^[-d].*[0-9]$/' file
rubino (1.9+)
ruby -ne 'print if /^[-d].*[0-9]$/' file
Bash
while read -r line ; do case $line in [-d]*[0-9]) echo $line; esac; done < file
Si noti che non solo il cursore (^) si comporta in modo diverso all'interno delle parentesi, ma avrà il risultato opposto di posizionarlo al di fuori delle parentesi. Posizionando il punto in cui si trova, cercherà tutte le stringhe che NON iniziano con il contenuto inserito tra parentesi. Dovresti anche mettere un punto prima dell'asterisco tra parentesi come con grep, ma agisce anche da "jolly".
grep ^[.rwx].*[0-9]$
Questo dovrebbe funzionare per voi, ho notato che alcuni manifesti usati una classe di caratteri nelle loro espressioni, che è un metodo efficace pure, ma non utilizzavano alcun nella tua espressione originale in modo sto cercando di ottenere uno il più vicino possibile al tuo, spiegando ogni piccolo cambiamento lungo la strada in modo che sia meglio compreso. Come possiamo imparare diversamente?
Oppure 'grep -x '[-d] rwx. * [0-9]''. – ephemient
Su Linux, sì - o dove viene utilizzato GNU grep. La versione che ho citato funzionerà su tutte le varianti di Unix, che vorrei presentare lo rende migliore. –
'-x' è POSIX. Seguendo il trattino: '[[.-.] [.].]]' (Che, scontato, è meno leggibile di '[] -]'). Io * credo * questo è anche POSIX ... – ephemient