2010-03-11 19 views

risposta

289

Usa:

grep -- -X

Correlati: What does a bare double dash mean? (grazie a nutty about natty).

+24

'- -' è un trucco pratico per un numero di utility Unix. – Johnsyweb

+1

Funziona con 'ack' – dukedave

+43

per quelli di noi che stanno chiedendo in questa fase cosa' --' significa o fa: http://unix.stackexchange.com/questions/11376/what-does-double-dash-mean –

22

grep -e -X farà il trucco.

+1

mia grep non ha -e, molto strano – Mike

+13

di Solaris per la perdita – Mike

+1

Disponibile su Solaris da/usr/XPG4/bin/grep, btw. Un sacco di utility più complete in quella directory. – pra

6

Non ho accesso a una macchina Solaris, ma lo grep "\-X" funziona per me su linux.

+0

Non funziona con la bandiera -F! –

1

è possibile utilizzare nawk

$ nawk '/-X/{print}' file 
34

Il trattino è un carattere speciale in Bash come notato in http://tldp.org/LDP/abs/html/special-chars.html#DASHREF. Quindi sfuggire a questa situazione ti fa passare Bash, ma Grep ha ancora il suo significato di trattini (fornendo opzioni).

Quindi hai davvero bisogno di scappare due volte (se preferisci non usare le altre risposte citate). Quanto segue/dovrebbe funzionare

grep \\-X 
grep '\-X' 
grep "\-X" 

Un modo per provare come Bash passa gli argomenti ad uno script/programma è quello di creare uno script sh che solo Echos tutti gli argomenti. Io uso uno script chiamato echo-args.sh con cui giocare di volta in volta, tutto ciò che contiene è:

echo $* 

invoco come:

bash echo-args.sh \-X 
bash echo-args.sh \\-X 
bash echo-args.sh "\-X" 

Si ottiene l'idea.

3

Il modo corretto sarebbe utilizzare "-" per interrompere l'elaborazione degli argomenti, come già menzionato. Ciò è dovuto all'utilizzo di getopt_long (funzione C di GNU da getopt.h) nell'origine dello strumento.

Ecco perché si nota lo stesso fenomeno su altri strumenti da riga di comando; poiché la maggior parte di questi sono strumenti GNU e usano questa chiamata, mostrano lo stesso comportamento.

Come nota a margine - getopt_long è ciò che ci offre la scelta interessante tra -rlo e --really_long_option e la combinazione di argomenti nell'interprete.

1

Se stai usando un altro programma di utilità che passa un singolo argomento a grep, è possibile utilizzare:

'[-]X' 
12
grep -- -X 
grep -- "-X" 
grep \\-X 
grep "\-X" 
grep -e -X 
grep [-]X 
0
ls -l | grep "^-" 

Spero che questo avrebbe servire il vostro scopo.

+1

Questa espressione cattura solo le righe che iniziano con un trattino. Non è conforme alla domanda iniziale. Vuole cercare una stringa che inizia con un trattino, ma le linee che contengono questa stringa non sono necessarie per iniziare con un trattino. Nella domanda iniziale, la stringa che inizia con un trattino può trovarsi in qualsiasi punto della linea. –

0

grep "^ -X" file di

Sarà grep e raccogliere tutte le linee formano il file. ^ nella grep "^" indica una riga che inizia con

+1

C'è già una risposta che suggerisce http://stackoverflow.com/a/27440348/441757 (pubblicato più di un anno fa) – sideshowbarker

+0

L'OP sta cercando * stringhe * che iniziano con '-', non le righe. – codeforester

Problemi correlati