0

ファイルに次の正規表現があります。ところで、私はSunOSにいます

例: ファイル パターンには次の行が含まれます。

Ora-[0-9]
violated

以下を含むファイル「datafile 」があります。

0:/scm/123451/test1.sql:dbuser@database:databasedb:no:yes:ORA-1234|key violated
1:/scm/123451/test1.sql:dbuser@database:databasedb:no:yes:ORA-|key violated
2:/scm/123451/test1_A.sql:dbuser@database:databasedb:no:yes:ORA-|key violated
3:/scm/123451/test1_B.sql:dbuser@database:databasedb:yes:yes:Violated
4.giga:key violated unique:giga
5.fifa:ora-error null value found:giga

ここで、 grep -fまたはfgrep -fのいずれかのコマンドを使用して、パターン ファイルの正規表現に一致する行を見つけたいと考えています。以下の 2 つのコマンドは、パターン ファイルに "Ora-[0-9]" 行のみが含まれていると機能しませんでした。

grep -if ./pattern ./datafile
frep -if ./pattern ./datafile

パターンファイルのパターンは固定文字列である必要がありますか?

4

2 に答える 2

2

結果が得られると思われるものでは/usr/xpg4/bin/grep ないことを試してください。Solarisには、レトロ互換性のために古い/usr/bin/grepUNIX コマンドが多数あります。悪名高いです。/usr/bin/usr/bin/awk

grep次のコマンドを使用すると、デフォルトで取得される grep を確認できます。

which grep

/usr/xpg4/bin/usr/bin にアクセスする前に PATH 変数に配置することで、プロセスのこれを変更できます。またはgrep、/usr/xpg4/bin/grep のエイリアスとして使用します。

.profile にエイリアスを追加します (おそらく .bashrc など):

alias grep=/usr/xpg4/bin/grep

PATH を変更します (再び .profile またはどこでも):

古い PATH の例 --

 PATH=/usr/bin:/usr/sbin

PATH を変更した例

PATH=/usr/bin/xpg4/bin:/usr/bin:/usr/sbin

PATH を変更すると、既存の個人用スクリプトの動作に影響を与える可能性があります。通常はマイナーですが、厄介な場合もあります。

egrep -i '(ora|violated)' また、例に基づいて -- 提案を使用することも検討してください。これには、パターンのファイルは必要ありません。必要に応じて何度でも変更できます。

于 2013-05-10T02:10:22.187 に答える
1

パターンが「Ora」のみに一致することに気付かなかったと思いますが、データファイルを見ると、「ora」と「ORA」がありますが、「Ora」はありません。したがって、大文字と小文字を区別しない一致を含めるか、パターンを修正してください。

編集: 申し訳ありませんが、ここで少し遅れます。SunOS には気づきませんでした。SunOS では、ここの Linux ボックスで正常に実行されるため、grep の実装が異なるようです。Solaris grepの問題?

于 2013-05-10T01:22:43.097 に答える