2016-06-30 11 views
-1

'*'を使用してパターンでファイル内の何かを検索しようとしていますが、動作していません。UNIXのkornシェルでgrep '*'を実行する方法

これは私がやろうとしているものです:

grep "files*.txt" $myTestFile 

は何も返していない、「*」はすべてであることを仮定しています。デフォルトでは

+0

ええ、grep 'files *' $ myTestFileとして動作しますが、末尾に.txtはありません –

+1

文字通り 'files * .txt'にマッチする必要がありますか、それとも' filesfoo.txt '?そしてそれは文字通り ''にマッチするglobの意味で ''を意味します。'、または任意の文字にマッチする正規表現の意味で使用しますか?その点については、正規表現の意味では '' * 'を意味するのでしょうか?それとも '' 0' '以上 '' '' 'を意味するのでしょうか? –

+1

ここではksh固有のものはありませんが、引用符を囲まずに '$ myTestFile'を使ってPOSIX拡張ルールに従うシェルを使用している場合は、バグです(ファイル名にスペースを入れてみてください)。 'grep'の動作はあなたのシェルではなくあなたのオペレーティングシステムによって定義されています。どのシェルを持っているのかはあなたが持っているgrepについて多くの手がかりを与えません。 –

答えて

1

grepは拡張正規Expressをサポートしていませんが、のgrep -Eまたはegrepのを行います。

egrepの "ファイルは、。* \。txtの" $ myTestFile

または

のgrep -E "ファイル。* \。txtの" $ myTestFile

でさらに、3種類のバリアントプログラムegrep,fgrepおよびrgrepが利用可能です。 egrepgrep -Eと同じです。 fgrepgrep -Fと同じです。 rgrepgrep -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. 
+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" 

[*]は、1文字のみの文字クラスを定義します。* - が含まれているため、その1文字だけが一致します。バックスラッシュベースのエスケープも可能ですが、異なるコンテキストで異なる意味を持つ可能性があり、信頼性が低くなります。


あなたはfilesを含むすべての行を一致させたい、と後で.txtな場合:

# match any line containing "files" and later ".txt" 
grep -e "files.*[.]txt" "$myTestFile" 

.*試合0個以上の文字を、ひいてはglob-に正規表現と等価ですパターン*。同様に、globパターンでは、.はそれ自身と一致しますが、正規表現では.は任意の文字と一致する可能性がありますので、[.]txtのように..txtにエスケープする必要があります。

関連する問題