我試圖找到一個文件中的模式使用'*'但不工作,任何想法如何做到這一點?如何grep'*'在unix korn外殼
這就是我想要做的事:
grep "files*.txt" $myTestFile
不返回任何東西,它的假設「*」應該是所有。
我試圖找到一個文件中的模式使用'*'但不工作,任何想法如何做到這一點?如何grep'*'在unix korn外殼
這就是我想要做的事:
grep "files*.txt" $myTestFile
不返回任何東西,它的假設「*」應該是所有。
默認情況下,grep
不支持擴展正規快件,但grep的-E或egrep的做。
egrep的 「文件。* \。TXT」 $ myTestFile
或
的grep -E 「文件。* \。TXT」 $ myTestFile
在此外,還有三個變體程序egrep
,fgrep
和rgrep
。 egrep
與grep -E
相同。 fgrep
與grep -F
相同。 rgrep
與grep -r
相同。直接 調用爲egrep
或fgrep
已被棄用,但提供允許依賴它們的歷史應用程序未經修改運行。
Matcher Selection
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)
-G, --basic-regexp
Interpret PATTERN as a basic regular expression (BRE, see below). This is the default.
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression (PCRE, see below). This is highly experimental and `grep -P` may warn of unimplemented features.
Jonathan和Jiangty的解決方案適合我!謝謝! –
如果你只想匹配確切字符串files*.txt
,這將是:
# match exactly "files*.txt"
grep -e "files[*][.]txt" "$myTestFile"
...,或者更簡單地說用fgrep
只匹配確切字符串給出:
# match exactly "files*.txt"
fgrep -e 'files*.txt' "$myTestFile"
[*]
定義了一個字符類只有一個字符 - *
- 包含,因此只匹配那一個字符。基於反斜槓的轉義也是可能的,但在不同的上下文中可能有不同的含義,因此不太可靠。
如果你想匹配的是包含files
任何線路,後來.txt
,則:
# match any line containing "files" and later ".txt"
grep -e "files.*[.]txt" "$myTestFile"
.*
匹配零或更多的字符,因此相當於glob-正則表達式模式*
。同樣,在glob模式中,.
只與自身匹配,在正則表達式中,.
可以匹配任何字符,因此需要轉義.txt
中的.
(如[.]txt
),以防止其匹配其他任何內容。
是的,作爲grep'files *'$ myTestFile工作,但不會在末尾使用.txt –
您是否確實需要匹配'files * .txt',或者它也可以是'filesfoo.txt '?你的意思是'''在全局意義上它只匹配一個文字'。',還是以正則表達式來匹配任何字符?對於這個問題,你的意思是'*'在正則表達式意義上的意思是「0或更多's's」,或者表示「匹配任何東西」的模式意義上? –
這裏沒有任何ksh-specific,順便說一句,除非你使用shell後面的shell使用'$ myTestFile'而不使用周圍的引號是POSIX擴展規則是錯誤的(嘗試傳遞一個帶有空格的文件名)。 grep的行爲是由你的操作系統定義的,而不是你的shell,告訴我們你有哪個shell沒有提供關於你擁有哪個'grep'的線索。 –