Terminale: uso comando grep con carattere '[' come destinazione, non funzione

0

Im usando il comando grep In un semplice script, il problema è che la stringa che sta cercando il comando grep include un carattere parentesi quadra: [ .

Dopo alcune ricerche, ho trovato che il carattere parentesi quadra [ è in effetti usato come una funzione per ottimizzare i comandi grep in uscita attraverso un processo chiamato " pipelining " (Anche se non citatemi su It as Non sono sicuro).

La mia domanda:

Come faccio a cercare una stringa con un carattere "[" al suo interno senza richiamare una funzione di pipelining in grep?

Elaborazione:

Lo script sta cercando un log di sistema per la stringa su[ . Questo è il mio attuale comando di malfunzionamento: tail -1 system.log | grep " su[" , tuttavia non funzionerà a causa della parentesi quadra alla fine, restituendo l'errore: grep: brackets ([ ]) not balanced .

Grazie In anticipo.

    
posta user4493605 13.08.2015 - 16:19
fonte

1 risposta

2

Le parentesi dovrebbero essere sottoposte a escape con \ , perché è un carattere speciale. Il tuo comando sarà simile a:

tail -1 system.log | grep " su\["

Caratteri speciali

Da questo sito puoi scoprire i caratteri speciali in bash.

What makes a character special? If it has a meaning beyond its literal meaning, a meta-meaning, then we refer to it as a special character. Along with commands and keywords, special characters are building blocks of Bash scripts.

\ è un carattere speciale e potrebbe essere utilizzato come:

[ ] test.

Test expression between [ ]. Note that [ is part of the shell builtin test (and a synonym for it), not a link to the external command /usr/bin/test.

[[ ]] test.

Test expression between [[ ]]. More flexible than the single-bracket [ ] test, this is a shell keyword.

[ ] array element.

In the context of an array, brackets set off the numbering of each element of that array. Array[1]=slot_1

echo ${Array[1]}

[ ] range of characters.

As part of a regular expression, brackets delineate a range of characters to match.

$[ ... ] integer expansion.

Evaluate integer expression between $[ ].

    
risposta data 13.08.2015 - 16:29
fonte

Leggi altre domande sui tag