Linux
使用 grep 搜尋以非單詞字元開頭的單詞
文件 testing.txt 的內容是:
ls -a cmake --verbose verbose
我想用來
grep
瀏覽這個文件,只找到以“–”開頭的單詞,即單詞“–verbose”但是,使用以下模式作為參數
grep
不起作用:$ cat testing.txt | grep -- Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information. $ cat testing.txt | grep - ls -a cmake --verbose $ cat testing.txt | grep '--v' grep (GNU grep) 3.1 Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>. $ cat testing.txt | grep ver cmake --verbose verbose $ cat testing.txt | grep '-ver' ls -a
grep
認為所有以 a 開頭的參數--
都是選項?您如何防止這種情況發生,以便 grep 可以搜尋以“–”開頭的模式(在文件中)?- 最後一次嘗試使用模式“-ver”,因此
grep
不認為該模式是一個選項,但隨後grep
與文件中的單詞“–verbose”不匹配,即使它包含模式“-ver”。是什麼導致了這種行為?
--
當它出現在命令行上時,該字元串對於大多數實用程序來說都是特殊的。它向命令行參數解析器發出*選項結束的信號。*它用於您可能希望傳遞以破折號開頭的文件名的情況,例如rm -- -f
(刪除-f
在目前目錄中呼叫的文件)。要
--
與 一起用作模式grep
,請明確告訴實用程序它是一個模式:grep -e --
-e
選項接受一個選項參數,該grep
參數是您要grep
搜尋的模式。你也可以使用
grep -- --
在這裡,
grep
知道第二個--
是模式,因為第一個--
說它不能是一個選項。您的最後一個管道返回
ls -a
,因為這是文件中不包含r
. 該命令grep -ver
也可以寫成grep -v -e r
,即“提取所有不(-v
)匹配r
(-e r
)的行”。