2016-06-30 27 views
-1

我試圖找到一個文件中的模式使用'*'但不工作,任何想法如何做到這一點?如何grep'*'在unix korn外殼

這就是我想要做的事:

grep "files*.txt" $myTestFile 

不返回任何東西,它的假設「*」應該是所有。

+0

是的,作爲grep'files *'$ myTestFile工作,但不會在末尾使用.txt –

+1

您是否確實需要匹配'files * .txt',或者它也可以是'filesfoo.txt '?你的意思是'''在全局意義上它只匹配一個文字'。',還是以正則表達式來匹配任何字符?對於這個問題,你的意思是'*'在正則表達式意義上的意思是「0或更多's's」,或者表示「匹配任何東西」的模式意義上? –

+1

這裏沒有任何ksh-specific,順便說一句,除非你使用shell後面的shell使用'$ myTestFile'而不使用周圍的引號是POSIX擴展規則是錯誤的(嘗試傳遞一個帶有空格的文件名)。 grep的行爲是由你的操作系統定義的,而不是你的shell,告訴我們你有哪個shell沒有提供關於你擁有哪個'grep'的線索。 –

回答

1

默認情況下,grep不支持擴展正規快件,但grep的-Eegrep的做。

egrep的 「文件。* \。TXT」 $ myTestFile

的grep -E 「文件。* \。TXT」 $ myTestFile

在此外,還有三個變體程序egrepfgreprgrepegrepgrep -E相同。 fgrepgrep -F相同。 rgrepgrep -r相同。直接 調用爲egrepfgrep已被棄用,但提供允許依賴它們的歷史應用程序未經修改運行。

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. 
+0

Jonathan和Jiangty的解決方案適合我!謝謝! –

1

如果你只想匹配確切字符串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),以防止其匹配其他任何內容。