質問コメントで追加リクエストに答えてください

質問コメントで追加リクエストに答えてください

日付と時刻のみを削除してください(例:2018-05-09-10.13) 下の文字列から

/pi_nfs/pixin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05- 
09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop 
completed.
/pm_nfs/pmfin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05- 
09-2018-23.00:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop 
completed.

以下の組み合わせを試しましたが返されました。

注文する:

zgrep -i "AppClusterMember stop completed" /pi_nfs/pixin/axpin 
zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018*|cut -d '.' -f3

出力:

05-09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember 
stop completed
05-09-2018-23.00:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember 
stop completed

予想出力:

05-09-2018-10.13
05-09-2018-23.00

ベストアンサー1

回答

grep -Eo "[0-9]{2}-[0-9]{2}-[0-9]{1,4}-[0-9]{2}\.[0-9]{2}" file

説明する

シンボルマーク:

-E- 拡張正規表現を使用してください。 (正規表現では、特定の文字をエスケープせずに使用できます。)

-o- 一致する出力のみを印刷します。

正規表現:

[0-9]0- - に数字がある場合は文字と一致します9

[0-9]{x}x0- 連続した文字と一致 - 連続した文字が数字の場合9

[0-9]{x,y}x- 数字の場合は少なくとも連続した文字と一致し09それ以上の場合は最も多くのy文字と一致します。

-特別な意味はなく、grep正確な文字を一致させようとします-

.これは、正しい文字を表すany characterためにエスケープを使用する必要があることを意味します。\.

質問コメントで追加リクエストに答えてください

zgrep -Po "[0-9]{2}-[0-9]{2}-[0-9]{1,4}-[0-9]{2}\.[0-9]{2}(?=.*stop completed\.)" file.gz

説明する

~からzgrep マニュアル:

Zgrepは圧縮またはgzip圧縮ファイルからgrepを呼び出します。
指定されたすべてのオプションはgrepに直接渡されます。

そのため、新しく追加されたフラグと正規表現部分についてのみ説明します。

シンボルマーク:

-P- Perl正規表現を使用してください。 (プレビューを許可)

正規表現:

(?=.*stop completed\.)(?=- 正規表現のうち from to 部分を)といいますPositive look-ahead
この場合、前の正規表現と一致します。ただ行にstop completed.afterが含まれている場合。

おすすめ記事