-F
是grep
一種選擇,從下面的說明書:什麼是grep的手冊中的-F選項的含義
解釋圖案作爲固定的字符串的列表,通過 換行符,分離其中的任何一個是要匹配
我的問題是
- 如何分隔的多個固定的字符串,什麼是換行符,
\n
或\
? - 看來
grep -F a\nh file
無效,如果我想查找以字符a
或h
開頭的行。
在此先感謝!
-F
是grep
一種選擇,從下面的說明書:什麼是grep的手冊中的-F選項的含義
解釋圖案作爲固定的字符串的列表,通過 換行符,分離其中的任何一個是要匹配
我的問題是
\n
或\
?grep -F a\nh file
無效,如果我想查找以字符a
或h
開頭的行。在此先感謝!
在grep
,-F
將導致模式來匹配字面上即沒有正則表達式解釋上的圖案(多個)來完成。
可以通過\n
輸入多個模式,即新行分隔。
並非所有的shell默認將\n
轉換爲換行符,在這種情況下可以使用$'a\nh'
。
例子:
$ 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
默認情況下,該模式是基本正則表達式(BRE)模式,但-F
將被解釋爲沒有元字符的文字字符串。
您也可以使用-E
這將啓用擴展正則表達式(ERE)。
% grep -F '..' <<< $'hello\nworld\n...'
...
% grep '..' <<< $'hello\nworld\n...'
hello
world
...
'$ '...''將被解釋的方式爲C字符串相同,但它是一個bash擴展。雖然bash不支持在字符串中對'\ n'進行解釋,但是破折號確實如此。我認爲安全的呼叫是使用'tmp_var = $(printf「hello \ nworld」)' – andlrc
@heemayl shell中的'<<<'是什麼,它似乎是它後面的內容成爲標準輸入。 – Tracy
@Tracy Exactly ..它在這裏被稱爲字符串(heredoc的一個子類型)檢查'man bash' – heemayl