2016-05-08 12 views
0

-F eine Option von grep ist, aus dem Handbuch unter die Bedeutung der Option -F ist:Was in grep Handbuch

interpretieren Muster als eine Liste von festen Strings, getrennt durch Zeilenumbrüche, von denen jedes wird

Meine Frage ist

  1. Wie getrennt mehrere feste Strings, was ist das newline-Zeichen,angepasst werdenoder \?
  2. Es scheint grep -F a\nh file ist nicht gültig, wenn ich Zeilen finden möchte, die mit einem Zeichen a oder h beginnt.

Vielen Dank im Voraus!

Antwort

2

In grep, -F werden Muster verursachen buchstäblich übereinstimmen d.h. keine Regex Interpretation auf dem Muster durchgeführt wird (s).

Mehrere Muster können eingegeben werden durch \n, d. H. Neuzeilentrennung.

Nicht alle Shells konvertieren standardmäßig \n in Newline, Sie können $'a\nh' in diesem Fall verwenden.

Beispiel:

$ echo $'foo\nf.o\nba.r\nbaar\n' 
foo 
f.o 
ba.r 
baar 

$ grep -F $'f.o\nba.r' <<<$'foo\nf.o\nba.r\nbaar\n' 
f.o 
ba.r 
+0

'$ '...'' die gleiche Weise wie ein C-String interpretiert werden, aber es ist eine Bash-Erweiterung. Während bash die Interpretation von '\ n' in Strings nicht unterstützt, tut es das auch. Ich denke, der sichere Aufruf ist 'tmp_var = $ (printf" Hallo \ nWorld ")' – andlrc

+0

@heemayl Was ist '<<<' in der Shell, scheint es, dass der Inhalt nach der Standard-Eingabe wird. – Tracy

+0

@Tracy Genau .. Es heißt hier Zeichenfolge (ein Untertyp von Heredoc) überprüfen 'Mann Bash' – heemayl

0

Standardmäßig ist das Muster ein BRE-Muster (Basic Regular Expressions), aber mit -F wird es als eine literale Zeichenfolge ohne Metazeichen interpretiert.

Sie können auch -E verwenden, die Extended Regular Expressions (ERE) aktiviert.

% grep -F '..' <<< $'hello\nworld\n...' 
... 
% grep '..' <<< $'hello\nworld\n...' 
hello 
world 
...