'*'を使用してパターンでファイル内の何かを検索しようとしていますが、動作していません。UNIXのkornシェルでgrep '*'を実行する方法
これは私がやろうとしているものです:
grep "files*.txt" $myTestFile
は何も返していない、「*」はすべてであることを仮定しています。デフォルトでは
'*'を使用してパターンでファイル内の何かを検索しようとしていますが、動作していません。UNIXのkornシェルでgrep '*'を実行する方法
これは私がやろうとしているものです:
grep "files*.txt" $myTestFile
は何も返していない、「*」はすべてであることを仮定しています。デフォルトでは
、grep
は拡張正規Expressをサポートしていませんが、のgrep -Eまたはegrepのを行います。
egrepの "ファイルは、。* \。txtの" $ myTestFile
または
のgrep -E "ファイル。* \。txtの" $ myTestFile
でさらに、3種類のバリアントプログラム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"
[*]
は、1文字のみの文字クラスを定義します。*
- が含まれているため、その1文字だけが一致します。バックスラッシュベースのエスケープも可能ですが、異なるコンテキストで異なる意味を持つ可能性があり、信頼性が低くなります。
あなたはfiles
を含むすべての行を一致させたい、と後で.txt
な場合:
# match any line containing "files" and later ".txt"
grep -e "files.*[.]txt" "$myTestFile"
.*
試合0個以上の文字を、ひいてはglob-に正規表現と等価ですパターン*
。同様に、globパターンでは、.
はそれ自身と一致しますが、正規表現では.
は任意の文字と一致する可能性がありますので、[.]txt
のように.
を.txt
にエスケープする必要があります。
ええ、grep 'files *' $ myTestFileとして動作しますが、末尾に.txtはありません –
文字通り 'files * .txt'にマッチする必要がありますか、それとも' filesfoo.txt '?そしてそれは文字通り ''にマッチするglobの意味で ''を意味します。'、または任意の文字にマッチする正規表現の意味で使用しますか?その点については、正規表現の意味では '' * 'を意味するのでしょうか?それとも '' 0' '以上 '' '' 'を意味するのでしょうか? –
ここではksh固有のものはありませんが、引用符を囲まずに '$ myTestFile'を使ってPOSIX拡張ルールに従うシェルを使用している場合は、バグです(ファイル名にスペースを入れてみてください)。 'grep'の動作はあなたのシェルではなくあなたのオペレーティングシステムによって定義されています。どのシェルを持っているのかはあなたが持っているgrepについて多くの手がかりを与えません。 –